每次调用函数时,都要修改Javascript中的局部变量

Modifying a local variable in Javascript every time the function is called

本文关键字:Javascript 修改 局部变量 调用 函数      更新时间:2023-09-26

每次调用myFunction()时,我都想增加i的值。正如您所看到的,每次i的值初始化为0时。所以结果总是零。如何确保i保持为局部变量并获得增量?如何使用闭包的概念来实现这一点?

function myFunction(){
    var i = 0;
    console.log(i);
    i++ 
};
myFunction();
myFunction();
myFunction();
myFunction(); // Result must be 3

对@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

简短的回答:将变量移出作用域。

(function() {
  var i = 0;
  myFunction = function (){
    console.log(i);
    i++ 
  };
})()
myFunction();
myFunction();
myFunction();
myFunction(); 

使用范围更广的函数将防止变量变为全局变量。

正如其他人所建议的,将变量从函数的作用域中移除就是答案。另一种选择是将变量设置为函数的属性。

function myFunction() {
    if (typeof myFunction.i !== "number") {
        myFunction.i = 0;
    }
    console.log(myFunction.i);
    myFunction.i += 1;
}
function myFunction() {
    console.log(i);
    myFunction.i++
};
myFunction.i = 0;
myFunction();
myFunction();
myFunction();
myFunction(); // Result must be 3

将变量放入全局范围:

var i = 0;
function myFunction(){
    console.log(i);
    i++ 
};
myFunction();
myFunction();
myFunction();
myFunction(); // Result will be 3