怎么轻易理解看似困难的js闭包问题

2025-11-09 01:17:54

1、首先,理解一下闭包,就是能够读取其他函数内部变量的函数,函数没有被释放,整条作用域链上的局部变量都将得到保留,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成‘定义在一个函数内部的函数’。

怎么轻易理解看似困难的js闭包问题

2、直接上代码:这里我解释一下,关键的代码执行是

result[i] = function() {

//隐藏的i在此,这里的i=10

return i;

}

这一句是关键,就是当执行完循环之后,i一直存在内存中,还没被释放。也不会释放。然后当执行到

for(var i = 0; i < funcs.length; i++) {

console.log(funcs[i]());

}

的时候,函数执行的是createFunctions()函数内的i变量,而此时的i是固定是10

运行结果是:10个10

怎么轻易理解看似困难的js闭包问题

怎么轻易理解看似困难的js闭包问题

3、如果我们想运行结果是0到9,我们可以稍微改造一下,

result[i] = (function() {

return i;

})();

修改成自执行函数,还有最后一行不需要再执行函数了,直接修改成funcs[i],

因为,我们每次执行的时候,result[i]已经自执行了,内部的i就是当时实时的i。

怎么轻易理解看似困难的js闭包问题

怎么轻易理解看似困难的js闭包问题

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢