Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将变量作为字符串注入?_Javascript - Fatal编程技术网

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:不,它只是不可维护。这里的问题不是全局变量。而是你在创建一个对象中应该包含的许多全局变量。