Javascript 如何将变量作为字符串注入?
我正在循环中使用一个动态创建的函数Javascript 如何将变量作为字符串注入?,javascript,Javascript,我正在循环中使用一个动态创建的函数 for (var i = 0; i < 4; i++) { window["functiontest" + i] = function () { alert(i); } } 我有没有办法强迫它将结果写入“字符串”或其他内容 谢谢大家的帮助。很抱歉,在搜索时找不到任何内容。主要是因为我不能很好地解释它:-) 但我最终得到了这样的结果: window["functiontest" + i] = function () { // I ne
for (var i = 0; i < 4; i++) {
window["functiontest" + i] = function () { alert(i); }
}
我有没有办法强迫它将结果写入“字符串”或其他内容
谢谢大家的帮助。很抱歉,在搜索时找不到任何内容。主要是因为我不能很好地解释它:-)
但我最终得到了这样的结果:
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
}
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);
}
(var genfunc=0;genfunc<4;genfunc++)的{
如果(genfunc==0){//左
窗口[“向下键”+系统控制[genfunc]]=(功能(唯一){
返回函数(){window[“sys_keyLeft”+unique]=-1;}
})(nid);
}
这是一个完美的例子,说明了在何处需要使用函数来创建作用域
for (var i = 0; i < 4; i++) {
window["functiontest" + i] = (function(index) {
return function () { alert(index); }
})(i);
}
for(变量i=0;i<4;i++){
窗口[“功能测试”+i]=(功能(索引){
返回函数(){alert(index);}
})(i) );
}
这是一个完美的例子,说明了在何处需要使用函数来创建作用域
for (var i = 0; i < 4; i++) {
window["functiontest" + i] = (function(index) {
return function () { alert(index); }
})(i);
}
for(变量i=0;i<4;i++){
窗口[“功能测试”+i]=(功能(索引){
返回函数(){alert(index);}
})(i) );
}
您正在通过引用传递变量。使用匿名函数对变量进行阴影处理以传递值:
(function(i) {
window['functiontest' + i] = function() {
alert(i);
};
})(i);
另外,不要这样制作全局对象。请使用对象:
var functiontest = {};
(function(i) {
functiontest[i] = function() {
alert(i);
};
})(i);
您正在通过引用传递变量。请使用匿名函数对变量进行阴影处理以传递值:
(function(i) {
window['functiontest' + i] = function() {
alert(i);
};
})(i);
另外,不要这样制作全局对象。请使用对象:
var functiontest = {};
(function(i) {
functiontest[i] = function() {
alert(i);
};
})(i);
不。这是一个关于何时执行函数以创建作用域的完美示例。如果我们将闭包定义为具有自由变量的函数,那么您刚才添加的函数不是闭包。但是,您返回的函数(以及原始代码中的函数)是闭包,这就是问题存在的原因(这是因为JavaScript是如何处理自由变量的)。@FelixKling,说得好。我已经修改了答案。不。这是一个完美的例子,说明了何时执行函数来创建范围。如果我们将闭包定义为具有自由变量的函数,那么您刚才添加的函数就不是闭包。但是,您返回的函数(以及原始代码中的函数)都是闭包,这就是问题存在的原因(因为JavaScript是如何处理自由变量的)@FelixKling,说得好。我已经修改了答案。thx寻求帮助…但是为什么使用全局变量不好?我需要能够在任何地方获得函数…这是一个性能问题吗?@JohnMalkowich:不,它只是不可维护。这里的问题不在于全局变量。而是你制造了很多全局变量,这些变量应该是连续的在object.thx中定义以获取帮助…但是为什么使用全局变量不好?我需要能够在任何地方获取函数…这是性能问题吗?@JohnMalkowich:不,它只是不可维护。这里的问题不是全局变量。而是你在创建一个对象中应该包含的许多全局变量。