每次调用函数时修改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