const f=(function(){ let count=0; return function(){ return “i have been called ${++count} times.";}})();f(); // i have been called 1 times.f(); //i have been called 2 times.我的理解每次f()的时候,都会先让count清0啊,哪里理解错了,求指教。
3 回答
已采纳
橋本奈奈未
TA贡献436条经验 获得超108个赞
你先了解立即执行函数和闭包可能比较好理解为什么。
(function(){})()是立即执行的,而return一个函数作为执行后的结果赋值给f。即f等于return的那个函数,你每次调用f其实是执行return的那个函数,函数内有count变量的引用,那么引擎会沿着作用域链查找,所以你每次都会修改count的值。函数里包裹函数就是js里的闭包。可以制造局部作用域,因为js里没有局部作用域(es6之前),所以通常会通过闭包的形式来形成类似局部作用域的效果,外部无法访问里面的变量和函数
cnyballk
TA贡献148条经验 获得超93个赞
//因为f()运行的是这个函数 function(){ return "i have been called ${++count} times."; } //而不是 function(){ let count=0; return function(){ return "i have been called ${++count} times."; }}
添加回答
举报
0/150
提交
取消