我正在循环中使用动态创建的函数。
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);
}
答案 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);