摘要:网上关于闭包的解释有很多,大多都过于概念化,定义很精准也很难看懂在说什么。。首先贴一道经典的闭包题理解闭包之前,我们要明确垃圾回收机制中关于引用次数的判断,即当引用对象的引用计数为的时候,表明此对象值可回收。
网上关于闭包的解释有很多,大多都过于概念化,定义很精准也很难看懂在说什么。。
首先贴一道经典的闭包题:
`
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...
摘要:两日前,发了一篇吐槽,莫名的火了一把。关于的第一个,其实就是声明一个常量,不允许变更。另外对象迭代这里出自,阮一峰大神写的入门指南,对象篇。 两日前,发了一篇吐槽,莫名的火了一把。经过大家的建议与鼓励,于是修改了简历,开始了重新投递,2天后接到第一份面试邀请。 此文为个人面试经历,QA问答过程与总结,不透露面试公司及面试人员,内容真实,如果有面试过我的大佬看到博客,欢迎指出问题。 循序...
摘要:在上面的执行中,只是又返回了一个新的对象,但是并没有执行新对象里面的属性对应的匿名函数喔,那就是没有改变的值啊,所以你继续也会输出同样的结果啊。 关于javascript中的闭包 我GitHub上的菜鸟仓库地址: 点击跳转查看其他相关文章 文章在我的博客上的地址: 点击跳转 其实关于闭包的定义,很多种说法,而关于闭包的解释,更是多不胜数了。很多说得非常复杂,也有很多...
摘要:关于循环和闭包当循环和闭包结合在一起时,经常会产生让初学者觉得匪夷所思的问题。闭包是一把双刃剑是比较难以理解和掌握的部分,它十分强大,却也有很大的缺陷,如何使用它完全取决于你自己。 在谈闭包之前,我们首先要了解几个概念: 什么是函数表达式? 与函数声明有何不同? JavaScript查找标识符的机制 JavaScript的作用域是词法作用域 JavaScript的垃圾回收机制 先来...
阅读 3034·2023-04-26 00:49
阅读 3713·2021-09-29 09:45
阅读 959·2019-08-29 18:47
阅读 2735·2019-08-29 18:37
阅读 2717·2019-08-29 16:37
阅读 3284·2019-08-29 13:24
阅读 1769·2019-08-27 10:56
阅读 2340·2019-08-26 11:42