javascript(闭包,立即执行函数,作用域等)

图例

所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。
在我个人理解,当函数a的内部函数b被外部变量c引用时,就形成了闭包

对于setTimeout函数,语法:setTimeout(code,millisec) 参数一为代码,参数二为毫秒数

在这个例子里面有几个js里面经常会面对的知识点,闭包,立即执行函数,作用域,所有可知要注意到第一个setTimeout里面匿名函数,这部分其实是放在for循环之后才会执行的,因为它是一个异步执行的函数,被放到了事件队列里最后执行。而且,每次setTimeout里面的函数执行时可以近似理解为是一次实例化。
1.�对于a
在计算a时,需要用到i,这里涉及到作用域链的知识,最内层的函数没有i的值,它会沿着链式结构一直向上查找,最终发现i是for循环执行之后的值。此时,i的循环完成,最后一次i++之后,i已经变成了4。这样,setTimeout执行3次实例化,每次i的值是不变的,最终值为a=4+4+4=12。
2.对于b
类似于a,在执行setTimeout里的函数时,需要找到i2的值,最终我们找到的是for循环到第三次时i2=i=3。(i2不会等于4,因为到最后一次i++之后,已经不会再进入循环体了)。所以类似上面,b的值是3+3+3=9。
3.对于c
这部分就涉及到闭包的理解了。在循环过程中,通过立即执行函数创建了闭包,每次i3都会被赋予当次循环时i的值并保存,i3的值依次为1,2,3,最终c=1+2+3=6。

结果


�图2 结果

对js的这个方面会持续更新中,以上本人愚见,望指教。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容