资讯专栏INFORMATION COLUMN

闭包--闭包作用之保存(一)

darkbug / 313人阅读

摘要:闭包作用解析保存函数执行形成一个私有作用域,函数执行完成,开成的这个栈内存一般情况下都会自动释放函数执行完成,当前私有作用哉栈内存中的某一部分内容被内存以外的其它东西变量元素的事件占用了,当前的栈内存就不能释放掉,也就形成了不销毁的私有作用

闭包作用解析:保存

函数执行形成一个私有作用域,函数执行完成,开成的这个栈内存一般情况下都会自动释放

函数执行完成,当前私有作用哉(栈内存)中的某一部分内容被内存以外的其它东西(变量/元素的事件)占用了,当前的栈内存就不能释放掉,也就形成了不销毁的私有作用域(里面的私有变量也不会销毁)

函数作用域

函数内部可以访问函数外部的变量,

函数外部不可以访问函数内部的变量

当在函数外部定义一个变量,变量在函数内部发生了变化,函数内部和外部都能访问到这个变量

        var a = 1;
        function fn1(){
            a++;
            console.log(a)  //2
        }
        fn1()
        console.log(a)  //2
闭包作用例子:保存

fn():调用完函数,就会释放栈内存

f(): 在函数外面有一个变量接收了这个返回值,此时 当前作用域不能销毁

        function fn() {
            var i = 1;
            return function(n) {
                console.log(n + i++)
            }
        }
        var f = fn();
        f(10);   //11     正确:11,10+1=10,之后1为2,因为f(10),在函数fn()外面调用,故函数fn()里的栈内存不销毁,i一直存在
        fn()(10); //12    正确:11 先执行fn(),之后再执行(10),即f(10),执行fn是重新把所有的流程执行一遍,临时不销毁,当返回结果执行完,没有被占用了,就会释放掉
        f(20);  //21      正确:22  //栈内存没有销毁,20+1
        fn()(20);  //22   正确:21 第二次执行fn是重新把所有的流程执行一遍,和第一次没有任何直接的关系,20+2=22
        function fn() {
            var i = 1;
            return function(n) {
                console.log(n + i++)
            }
        }
        var f = fn();
        f(10);  //11
        f(20); //22
        function fn() {
            var i = 1;
            return function(n) {
                console.log(n + i++)
            }
        }
        var f = fn();
        fn()(10); //11
        fn()(20); //21
        function fn() {
            var i = 1;
            return function(n) {
                console.log(n + i++)
            }
        }
        var f = fn();
        fn()(10); //11
        f(20); //21
举一反三
        var i = 1;
        function fn() {
            return function(n) {
                console.log(n + i++)
            }
        }
        var f = fn();
        f(10); //11
        fn()(10); //12
        f(20); //23
        fn()(20); //24
        function fn(i) {
            return function(n) {
                console.log(n + i++)   
            }
            //console.log(i)  //因为return,所以走不到这一hi
        }
        var f = fn(10);
        f(20); //30       正确:30 
        fn(10)(20); //31   正确:30
        f(30); //40        正确:41
        fn(20)(10); // 31  正确:30
        f(40) //50         正确:52

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/99276.html

相关文章

  • 老生常谈闭包(你不可不知的若干知识点)

    摘要:闭包是什么这是一个在面试的过程中出现的概率为以上的问题,也是我们张口就来的问题。文章推荐我们面试中在被问到闭包这个问题是要注意的几点闭包的延伸,让面试变得 闭包是什么?这是一个在面试的过程中出现的概率为60%以上的问题,也是我们张口就来的问题。但是我们往往发现,在面试的过程中我们的回答并不那么让面试官满意,我们虽然能张口说出一些但是却不能系统的对这个问题进行回答。面试官希望加入自己团队...

    daydream 评论0 收藏0
  • 进击的 JavaScript(四) 闭包

    摘要:此时产生了闭包。导致,函数的活动对象没有被销毁。是不是跟你想的不一样其实,这个例子重点就在函数上,这个函数的第一个参数接受一个函数作为回调函数,这个回调函数并不会立即执行,它会在当前代码执行完,并在给定的时间后执行。 上一节说了执行上下文,这节咱们就乘胜追击来搞搞闭包!头疼的东西让你不再头疼! 一、函数也是引用类型的。 function f(){ console.log(not cha...

    Anleb 评论0 收藏0
  • JavaScript闭包(三)

    摘要:目录执行环境与作用域链立即执行函数闭包知识点什么是闭包使用闭包的意义与注意点闭包的具体应用小结这是基本语法的函数部分的第篇文章,主要讲述了中比较重要的知识点闭包在讲闭包之前,在上一篇函数二的基础上,进一步深化执行环境和作用域链的知识点,并补 目录 1.执行环境与作用域链 2. 立即执行函数 3. 闭包知识点 3.1 什么是闭包 3.2 使用闭包的意义与注意点 3.3 闭包的具体应用 4...

    Anonymous1 评论0 收藏0
  • 学习JavaScript闭包

    摘要:闭包在我的前端学习中一直也是盲点,之前很多次看到别人提到我都是完全听不懂。闭包导致的问题因为闭包会使得函数中的变量都保存在内存中,如不能及时释放会对性能造成影响。 闭包在我的前端学习中一直也是盲点,之前很多次看到别人提到我都是完全听不懂。最近一直看书和写demo,对闭包也逐渐有所理解了,在这里写下这篇博客。 从作用域链讲起 首先明确几个概念:1.JavaScript有函数级作用域,但没...

    shiguibiao 评论0 收藏0
  • Js学习笔记:闭包

    摘要:一前言这个周末,注意力都在学习基础知识上面,刚好看到了闭包这个神圣的东西,所以打算把这两天学到的总结下来,算是巩固自己所学。因此要注意闭包的使用,否则会导致性能问题。五总结闭包的作用能够读取其他函数内部变量。 # 一、前言 这个周末,注意力都在学习基础Js知识上面,刚好看到了闭包这个神圣的东西,所以打算把这两天学到的总结下来,算是巩固自己所学。也可能有些不正确的地方,也请大家看到了,麻...

    Crazy_Coder 评论0 收藏0

发表评论

0条评论

darkbug

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<