如何将变量注入字符串?

时间:2013-02-21 21:08:42

标签: javascript

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

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);
   }

2 个答案:

答案 0 :(得分:2)

您需要使用函数创建范围的完美示例。

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

答案 1 :(得分:2)

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

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

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

var functiontest = {};

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