资讯专栏INFORMATION COLUMN

闭包、作用域链

JasinYip / 3063人阅读

摘要:说到闭包大家可能会说函数套函数,延长作用域链。刚开始一直不明白为什么执行两次的值会累加。我这属于没有明白函数的执行环境及作用域链。

1.说到闭包大家可能会说函数套函数,延长作用域链。对没错,确实是这样的,但是你对他的理解是多少呢,函数闭包可以说的有很多,夸张的说,说个半天是绝对没问题的,它的用处非常多,作用也非常多,这个需要你多想想的,不多说,下面我们来看代码。

function A(){
        var x = 1;
        return function(){
            x++;
            console.log(x);
        }
    }
    var m1 = A();
    m1();//2
    m1();//3
    var m2 = A();
    m2();//2
    m1();//4

刚开始一直不明白为什么m1执行两次x的值会累加。我这属于没有明白函数的执行环境及作用域链。
当m1第一次执行时A()会在内存中开辟一个环境,然后返回函数也会开辟一个执行环境也就是大圈里面有个小圈,
此时小圈里的x时从大圈里拿的,然后会打印2,第二次执行m1时,由于第一次执行m1延长作用域链,也就是大小圈依然存在而且里面的x=2,
此时大圈将x的值重新赋值为1,但是小圈里的x依旧是2,当执行到x++是,
会检测当前环境是否有x,答案是有此时x=2,执行x++时就是2++,打印出来就是3,
当将A()给了m2时又会开辟一个环境,这两个环境并不干扰,没有任何联系。
以上就是我对闭包的一点拙见,可能有不对的地方(全凭个人乱想),请大佬指正!

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

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

相关文章

  • 前端基础进阶(四):详细图解作用域链闭包

    摘要:之前一篇文章我们详细说明了变量对象,而这里,我们将详细说明作用域链。而的作用域链,则同时包含了这三个变量对象,所以的执行上下文可如下表示。下图展示了闭包的作用域链。其中为当前的函数调用栈,为当前正在被执行的函数的作用域链,为当前的局部变量。 showImg(https://segmentfault.com/img/remote/1460000008329355);初学JavaScrip...

    aikin 评论0 收藏0
  • 谈js中的作用域链闭包

    摘要:所以,当在函数中使用全局变量的时候,所产生的代价是最大的,因为全局对象一直处于作用域链的最末位置,读取局部变量是最快的。 什么是作用域 在编程语言中,作用域控制着变量与参数的可见性及生命周期,它能减少名称冲突,而且提供了自动内存管理(javascript 语言精粹) 静态作用域 再者,js不像其他的编程语言一样,拥有着块级作用域,就像下面一段代码。 function afunction...

    LucasTwilight 评论0 收藏0
  • 学习笔记:JavaScript 闭包是怎么通过作用域链霸占更多内存的?

    摘要:闭包是怎么通过作用域链霸占更多内存的本文是作者学习高级程序设计第一小节的一点个人理解,详细教程请参考原教材。函数执行过程创建了一个函数的活动对象,作用域链的最前端指向这个对象。函数执行完毕返回值后执行环境作用域链和活动对象一并销毁。 JavaScript 闭包是怎么通过作用域链霸占更多内存的? 本文是作者学习《JavaScript 高级程序设计》7.2第一小节的一点个人理解,详细教程请...

    HmyBmny 评论0 收藏0
  • [ JS 进阶 ] 闭包作用域链,垃圾回收,内存泄露

    摘要:执行返回的内部函数,依然能访问变量输出闭包中的作用域链理解作用域链对理解闭包也很有帮助。早期的版本里采用是计数的垃圾回收机制,闭包导致内存泄露的一个原因就是这个算法的一个缺陷。 关于闭包,我翻了几遍书,看了几遍视频,查了一些资料,可是还是迷迷糊糊的,干脆自己动手来个总结吧 !欢迎指正... (~ o ~)~zZ 1. 什么是闭包? 来看一些关于闭包的定义: 闭包是指有权...

    clasnake 评论0 收藏0
  • JS基础知识:变量对象、作用域链闭包

    摘要:前言这段时间一直在消化作用域链和闭包的相关知识。而作用域链则是这套规则这套规则的具体运行。是变量对象的缩写那这样放有什么好处呢我们知道作用域链保证了当前执行环境对符合访问权限的变量和函数的有序访问。 前言:这段时间一直在消化作用域链和闭包的相关知识。之前看《JS高程》和一些技术博客,对于这些概念的论述多多少少不太清楚或者不太完整,包括一些大神的技术文章。这也给我的学习上造成了一些困惑,...

    Keven 评论0 收藏0
  • [学习笔记] JavaScript 闭包

    摘要:但是,必须强调,闭包是一个运行期概念。通过原型链可以实现继承,而与闭包相关的就是作用域链。常理来说,一个函数执行完毕,其执行环境的作用域链会被销毁。所以此时,的作用域链虽然销毁了,但是其活动对象仍在内存中。 学习Javascript闭包(Closure)javascript的闭包JavaScript 闭包深入理解(closure)理解 Javascript 的闭包JavaScript ...

    sunsmell 评论0 收藏0

发表评论

0条评论

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