每次调用函数时在Javascript中修改局部变量

时间:2016-05-09 12:28:50

标签: javascript

我希望每次拨打i时都会增加myFunction()的值。如您所见,每次i的值初始化为0时。所以结果总是为零。如何确保i仍然是局部变量并获得增量?如何通过闭包的概念来完成?

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

5 个答案:

答案 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