请我理解关闭。
为什么计数器在第一个版本中起作用,但在第二个版本中不起作用?
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
有什么不同?
在第一个示例中,您使用的是立即调用函数表达式 https://developer.mozilla.org/en-US/docs/Glossary/IIFE。这是内联调用函数并将结果函数分配给计数器。每次调用 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)