猿问

请大神帮忙解释下下面这个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啊,哪里理解错了,求指教。

慕前端6174657
浏览 1659回答 3
3回答

橋本奈奈未

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

cnyballk

//因为f()运行的是这个函数 function(){          return "i have been called ${++count} times."; }   //而不是 function(){     let count=0;     return function(){          return "i have been called ${++count} times."; }}
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答