资讯专栏INFORMATION COLUMN

关于闭包的个人理解

cheng10 / 1666人阅读

摘要:网上关于闭包的解释有很多,大多都过于概念化,定义很精准也很难看懂在说什么。。首先贴一道经典的闭包题理解闭包之前,我们要明确垃圾回收机制中关于引用次数的判断,即当引用对象的引用计数为的时候,表明此对象值可回收。

网上关于闭包的解释有很多,大多都过于概念化,定义很精准也很难看懂在说什么。。
首先贴一道经典的闭包题:
`

function a(){
var b=0
return function(){
  console.log(b++)
  }
}
var c=a()
var d=a()
c() //0
c() //1
d() //0

`

理解闭包之前,我们要明确js垃圾回收机制中关于引用次数的判断,即当引用对象的引用计数为0的时候,表明此对象值可回收。一个参数的作用域,即其是否能被调用,在于其调用时是否被回收,被回收了自然不能被调用。
以上代码,当执行var c=a()时,可以理解为方法a开辟了一个新的内存空间area1,area1中定义的变量b,由于返回的function中引用了变量area1.b(为了方便理解,以此表示area1空间中的b变量),因此area1.b的引用次数为1,即垃圾回收机制不会对area1.b进行回收,后续执行c()时依然可以调用area1.b
同理,var d=a(),此时开辟新的内存空间area2,并在其中定义变量b。
因此上述代码可以理解为:
`

function a(){
var b=0
return function(){
  console.log(b++)
  }
}
var c=a()
var d=a()
c() //执行console.log(area1.b++),输出0
c() //执行console.log(area1.b++),输出1
d() //执行console.log(area2.b++),输出0

`

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

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

相关文章

  • 还担心面试官问闭包

    摘要:一言以蔽之,闭包,你就得掌握。当函数记住并访问所在的词法作用域,闭包就产生了。所以闭包才会得以实现。从技术上讲,这就是闭包。执行后,他的内部作用域并不会消失,函数依然保持有作用域的闭包。 网上总结闭包的文章已经烂大街了,不敢说笔者这篇文章多么多么xxx,只是个人理解总结。各位看官瞅瞅就好,大神还希望多多指正。此篇文章总结与《JavaScript忍者秘籍》 《你不知道的JavaScri...

    tinyq 评论0 收藏0
  • 关于个人第一天前端面试面试问答QA,希望能对其他找前端工作朋友有所帮助。

    摘要:两日前,发了一篇吐槽,莫名的火了一把。关于的第一个,其实就是声明一个常量,不允许变更。另外对象迭代这里出自,阮一峰大神写的入门指南,对象篇。 两日前,发了一篇吐槽,莫名的火了一把。经过大家的建议与鼓励,于是修改了简历,开始了重新投递,2天后接到第一份面试邀请。 此文为个人面试经历,QA问答过程与总结,不透露面试公司及面试人员,内容真实,如果有面试过我的大佬看到博客,欢迎指出问题。 循序...

    Youngdze 评论0 收藏0
  • 关于javascript中闭包

    摘要:在上面的执行中,只是又返回了一个新的对象,但是并没有执行新对象里面的属性对应的匿名函数喔,那就是没有改变的值啊,所以你继续也会输出同样的结果啊。 关于javascript中的闭包 我GitHub上的菜鸟仓库地址: 点击跳转查看其他相关文章 文章在我的博客上的地址: 点击跳转         其实关于闭包的定义,很多种说法,而关于闭包的解释,更是多不胜数了。很多说得非常复杂,也有很多...

    myeveryheart 评论0 收藏0
  • 浅谈对JavaScript闭包理解

    摘要:关于循环和闭包当循环和闭包结合在一起时,经常会产生让初学者觉得匪夷所思的问题。闭包是一把双刃剑是比较难以理解和掌握的部分,它十分强大,却也有很大的缺陷,如何使用它完全取决于你自己。 在谈闭包之前,我们首先要了解几个概念: 什么是函数表达式? 与函数声明有何不同? JavaScript查找标识符的机制 JavaScript的作用域是词法作用域 JavaScript的垃圾回收机制 先来...

    missonce 评论0 收藏0

发表评论

0条评论

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