1

我正在循环中使用动态创建的函数。

for (var i = 0; i < 4; i++) {
        window["functiontest" + i] = function () { alert(i); }
}

它可以工作,但不是我想让它工作的方式。因为当我这样做时,这意味着functiontest0它将在运行时发出警报“3”,因为它实际上是var i在循环完成添加到i.

我想要的是以某种方式“硬编码”电流i,因此它实际上会警告“0”而不是“3”。我的意思是这样的:

window["functiontest" + i] = function () {
  // I need just the current state for `i` here and
  // not just the variable `i` - so for exampe I need
  // it as `i` literally put 0
}

有什么办法可以强制它将结果写入“字符串”或其他内容?

THX 寻求帮助。很抱歉重复搜索时找不到任何东西。主要是因为我不能很好地解释它:-)

但我最终得到了这样的结果:

 for (var genfunc = 0; genfunc < 4; genfunc++) {

   if (genfunc == 0) { //left
       window["keyDown" + sys_curcontrols[genfunc]] = (function (unique) {
           return function () { window["sys_keyLeft" + unique] = -1; }
       })(nid);
   }
4

2 回答 2

2

一个完美的例子,说明您需要在哪里使用函数来创建范围。

for (var i = 0; i < 4; i++) {
    window["functiontest" + i] = (function(index) {
        return function () { alert(index); }
    })(i);
}
于 2013-02-21T21:10:30.250 回答
2

您通过引用传递变量。使用匿名函数隐藏变量以传递值:

(function(i) {
    window['functiontest' + i] = function() {
        alert(i);
    };
})(i);

另外,不要像这样制作全局变量。使用一个对象:

var functiontest = {};

(function(i) {
    functiontest[i] = function() {
        alert(i);
    };
})(i);
于 2013-02-21T21:11:01.360 回答