请理解关闭。 为什么计数器在第一个版本中工作,但在第二个版本中没有?
var counter = (function(){
var count=0;
return function(){
return count++;
}
}());
console.log(counter());
console.log(counter());
console.log(counter());
计数器输出0,1,2
var counter = function(){
var count=0;
return function(){
return count++;
}
};
console.log(counter()());
console.log(counter()());
console.log(counter()());
计数器输出0,0,0
有什么区别?
答案 0 :(得分:1)
在第一个示例中,您使用的是Immediately Inovked Function Expression。这是调用内联函数并将结果函数分配给计数器。每次调用counter()时,都会调用内部函数,该函数在范围内具有count变量。
第二个例子相当于写作
function counter() {
var count=0;
return function(){
return count++;
}
}
当你用这种方式编写时,每次调用counter()时,你都会返回一个 new 函数,并在范围内使用count
变量
您可以在第二个示例中执行等效操作,方法是将结果分配给变量并多次调用。
var counter = function(){
var count=0;
return function(){
return count++;
}
};
var counterObj = counter();
counterObj(); // returns 0
counterObj(); // returns 1
counterObj(); // returns 2
答案 1 :(得分:-1)
在第一个示例中,为计数器分配了自调用函数的返回值。
counter =(
在第一个例子中,调用counter并返回
return count++;.
在第二个例子中,counter是一个常规函数,当从声明
开始调用时var count=0;