多语言展示
当前在线:1571今日阅读:91今日分享:37

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

闭包(closure)是Javacript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。
工具/原料
1

编辑器

2

html

方法/步骤
1

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

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

3

如果我们想运行结果是0到9,我们可以稍微改造一下,result[i] = (function() { return i; })();修改成自执行函数,还有最后一行不需要再执行函数了,直接修改成funcs[i],因为,我们每次执行的时候,result[i]已经自执行了,内部的i就是当时实时的i。

注意事项

希望可以帮助大家理解,手动敲代码更重要

推荐信息