循环函数时如何存储变量 - javascript闭包

时间:2015-07-02 11:10:02

标签: javascript jquery

我有以下代码可供使用:

function loopingFunction(){

    if(typeof(foo)=="undefined"){
        var foo = 0;
    }

    alert(foo);

    if(foo==0){
        // some codes here
    }

    foo++;
}

loopingFunction被多次调用,每次我的变量foo保持不变。当我尝试增加它时,它会丢失

计数器似乎不起作用,每次调用函数时都会增加var foo。

这有什么解决方法吗? 任何帮助都将不胜感激..

仅供参考我不能让foo全球化,我必须找到一个使用闭包的解决方法..

3 个答案:

答案 0 :(得分:2)

您在函数内声明foo。它的范围是该功能。每次调用该函数时,都会创建一个名为foo的新变量。

如果要重用相同的变量,请在外部声明。

var foo;

function loopingFunction() {

  if (typeof foo === "undefined") {
    foo = 0;
  }

  alert(foo);

  if (foo == 0) {
    // some codes here
  }

  foo++;
}

loopingFunction();
loopingFunction();
loopingFunction();

您可以在循环外执行所有初始化,而不仅仅是事情。

var foo = 0;

function loopingFunction() {

  alert(foo);

  if (foo == 0) {
    // some codes here
    // … these could probably be moved outside the function too
  }

  foo++;
}

loopingFunction();
loopingFunction();
loopingFunction();

如果您希望foo不是全局的,可以使用闭包:

var loopingFunction = function() {

  var foo = 0;

  function loopingFunction() {

    alert(foo);

    if (foo == 0) {
      // some codes here
      // … these could probably be moved outside the function too
    }

    foo++;
  }

  return loopingFunction;

}();

loopingFunction();
loopingFunction();
loopingFunction();

答案 1 :(得分:0)

您正在声明局部变量。您必须通过两种方式初始化为全局:

方式1

body {
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

方式2

var foo = 0;
function looping....

答案 2 :(得分:0)

您声明 foo 变量是本地使其成为全局变量。

core_data.swap(temp_data)