快捷导航

请大神帮忙解释下下面这个js代码,为什么count会逐渐增加

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啊,哪里理解错了,求指教。

免责声明:本内容仅代表回答者见解不代表本站观点,请谨慎对待。

版权声明:作者保留权利,不代表本站立场。

回复

使用道具 举报

参与会员2

你先了解立即执行函数和闭包可能比较好理解为什么。
(function(){})()是立即执行的,而return一个函数作为执行后的结果赋值给f。即f等于return的那个函数,你每次调用f其实是执行return的那个函数,函数内有count变量的引用,那么引擎会沿着作用域链查找,所以你每次都会修改count的值。函数里包裹函数就是js里的闭包。可以制造局部作用域,因为js里没有局部作用域(es6之前),所以通常会通过闭包的形式来形成类似局部作用域的效果,外部无法访问里面的变量和函数
回复

使用道具 举报

//因为f()运行的是这个函数function(){return"ihavebeencalled${++count}times.";}//而不是function(){letcount=0;returnfunction(){return"ihavebeencalled${++count}times.";}}
回复

使用道具 举报

可能感兴趣的问答

发新帖
  • 微信访问
  • 手机APP