猿问

请帮忙解答下下面几个疑惑

下面函数执行结果为啥会是2?,每次调用时不是已经将counter重新初始化了吗?还有就是()()是立即执行函数,那么为啥用var add = ...定义add()时return中没有调用counter?困惑好久,请大神帮忙解答下

var add=(function(){        var counter=0;        
        return function(){
        counter+=1;
        }
        
        })();
        
add();
add();//输出结果为2


临摹微笑
浏览 614回答 1
1回答

慕森卡

你可以改成var add = (function() {    var counter = 0;    return function() {         counter += 1;        console.log(counter)     } }); add()(); add()(); //输出结果为1首先add是一个立即执行函数表达式,在f1函数作用域里创建了变量counter,然后在f2的函数作用域上访问了f1词法作用域下的counter(就是所谓的闭包),一直访问的都是那一个。var add=(function f1(){        var counter=0;                 return function f2(){         counter+=1;         }                  })();          add(); add();//输出结果为2
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答