在javascript函数中设置常量

时间:2013-05-06 02:03:21

标签: javascript function variables

看看这段代码:

var arr = new Array();
for (var i = 0; i < 10; i++) {
    arr[i] = {
        func:function() {
            console.log(i);
        }
    }
}
arr[0].func();

我对此感到困惑,因为我认为这会有效。我基本上希望数组中的每个对象都打印在创建函数时给出的值。

现在,当我呼叫func()时,它会在控制台中打印10。有没有办法让它打印0, 1, 2, 3, 4, 5, 6, 7, 8, 9?谢谢!

3 个答案:

答案 0 :(得分:1)

问题在于里面的函数是引用变量&#39; i&#39;每次增加。您可以存储&#39; i&#39;在对象的每次迭代中,以及像这样的函数:

http://jsfiddle.net/Sgnvp/

var arr = new Array();
for (var i = 0; i < 10; i++) {
    arr[i] = {
        func:function() {
            console.log(this.value);
        },
        value: i
    }
}
arr[0].func();

答案 1 :(得分:0)

您必须创建一个封装来封装该值。我在这里呼叫consoleIt并传递iconsoleIt围绕i

创建了一个闭包
var arr = [];

function consoleIt (i) {
    return function () {
        console.log(i);
    }
};

for (var i = 0; i < 10; i++) {
    arr[i] = { 
        func: consoleIt(i)
    };
}

arr[0].func();

答案 2 :(得分:0)

这并不比thebreiflabb的做法更好,但这是一项值得了解的有趣技术:

    var arr = [];

    for (var i = 0; i < 10; i++){

      (function(i){
        arr[i] = {
          func : function(){
            console.log(i); 
          }
        };
      })(i);

    }

    arr[0].func();

它只使用匿名闭包来限制i。