每次调用函数时修改Javascript中的局部变量
每次调用每次调用函数时修改Javascript中的局部变量,javascript,Javascript,每次调用myFunction()时,我都要增加I的值。如您所见,每次i的值被初始化为0。所以结果总是零。如何确保i保持局部变量并获得增量?使用闭包的概念如何做到这一点 function myFunction(){ var i = 0; console.log(i); i++ }; myFunction(); myFunction(); myFunction(); myFunction(); // Result must be 3 简短回答:将变量移出范围 (funct
myFunction()
时,我都要增加I
的值。如您所见,每次i
的值被初始化为0
。所以结果总是零。如何确保i
保持局部变量并获得增量?使用闭包的概念如何做到这一点
function myFunction(){
var i = 0;
console.log(i);
i++
};
myFunction();
myFunction();
myFunction();
myFunction(); // Result must be 3
简短回答:将变量移出范围
(function() {
var i = 0;
myFunction = function (){
console.log(i);
i++
};
})()
myFunction();
myFunction();
myFunction();
myFunction();
使用范围更广的函数将阻止变量变为全局变量。将变量置于全局范围:
var i = 0;
function myFunction(){
console.log(i);
i++
};
myFunction();
myFunction();
myFunction();
myFunction(); // Result will be 3
正如其他人所建议的,将变量从函数的作用域中移除就是答案。另一种方法是将变量设置为函数的属性
function myFunction() {
if (typeof myFunction.i !== "number") {
myFunction.i = 0;
}
console.log(myFunction.i);
myFunction.i += 1;
}
对@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这可以用闭包的概念来实现吗@A1rPun@VishnuPaspunoor实际上,
myFunction
在这里已经是一个函数了。
myFunction(); // logs 0
myFunction(); // logs 1
myFunction(); // logs 2
myFunction(); // logs 3