我正在循环中使用动态创建的函数。如何注入一个变量作为字符串?
for (var i = 0; i < 4; i++) {
window["functiontest" + i] = function() { alert(i); }
}
它的工作原理,但不是我想如何让它工作。因为当我这样做时,这意味着当functiontest0
将运行时,它将提醒“3”,因为它实际上在循环完成时添加var 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 help guys。并抱歉重复无法找到任何东西,而搜索它。主要是因为我不能解释它是那么好:-)
但我结束了这样的事情:
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);
}
不。它是执行函数以创建范围的完美示例。如果我们将闭包定义为带有自由变量的函数,那么刚刚添加的函数不是闭包。然而,你返回的函数(和函数原始代码)是闭包,这就是为什么问题甚至存在(并且由于JavaScript处理自由变量的原因)。 – 2013-02-21 21:12:50
@FelixKling,好点。我修改了答案。 – Lukas 2013-02-21 21:19:38
thx求助:-) – JohnMalkowich 2013-02-21 21:34:04