我希望每次拨打i
时都会增加myFunction()
的值。如您所见,每次i
的值初始化为0
时。所以结果总是为零。如何确保i
仍然是局部变量并获得增量?如何通过闭包的概念来完成?
function myFunction(){
var i = 0;
console.log(i);
i++
};
myFunction();
myFunction();
myFunction();
myFunction(); // Result must be 3
答案 0 :(得分:4)
对@ Carlo的答案进行了一些修改。这使myFunction
保持在当前范围内。
var myFunction = (function() {
var i = 0;
return function (){
console.log(i);
i++;
};
})();
示例:
myFunction(); // logs 0
myFunction(); // logs 1
myFunction(); // logs 2
myFunction(); // logs 3
答案 1 :(得分:3)
简短回答:将变量排除在范围之外。
(function() {
var i = 0;
myFunction = function (){
console.log(i);
i++
};
})()
myFunction();
myFunction();
myFunction();
myFunction();
使用更宽范围的功能可以防止变量进入全局。
答案 2 :(得分:0)
将变量放在全局范围内:
var i = 0;
function myFunction(){
console.log(i);
i++
};
myFunction();
myFunction();
myFunction();
myFunction(); // Result will be 3
答案 3 :(得分:0)
正如其他人所建议的那样,将变量从函数的范围中取出就是答案。另一种方法是将变量设置为函数的属性。
function myFunction() {
if (typeof myFunction.i !== "number") {
myFunction.i = 0;
}
console.log(myFunction.i);
myFunction.i += 1;
}
答案 4 :(得分:0)
function myFunction() {
console.log(i);
myFunction.i++
};
myFunction.i = 0;
myFunction();
myFunction();
myFunction();
myFunction(); // Result must be 3