正在回答 回答被采纳积分+1
3回答
慕移动3569406
2020-01-14 19:22:05
第一次count()执行完后, 返回的就是count函数里面的匿名函数了, 所以fn被赋值为这个匿名函数, 即为fn = function(){....}, 所以当执行fn的时候是不包括var num=1 这个语句。
其实这个就是后面会讲到的闭包的概念, 原本函数执行的基本原则是执行完后就立刻销毁执行环境(也就是count函数执行完了, num应该是跟着执行环境一起被销毁的, 是没有办法再访问的), 但是这里count函数在执行完毕之前返回了一个匿名函数, 这让我们想起了另外作用域链的感念, 也就是说函数作为一个局部作用域可以访问到上层作用域的变量(也就是说count返回的这个匿名函数可以访问到count函数里面的num变量)。
所以返回出来的匿名函数依然持有对于count函数内部的访问权限, 所以count依然有利用价值, 所以不会被销毁。
回头来看就知道了, 为什么执行了三次fn() ,结果确是1,2,3了。
因为它们输出的是count函数执行完以后保留下来num变量的值。
个人水平有限,其实闭包还有更深层的解释, 可以参考老师的视频, 要想更明了、深入地了解闭包, 还是要看书籍补充, 多看不同书对于同一个概念的解释,就会越来越懂。
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星