Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.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_Function - Fatal编程技术网

Javascript动态创建函数列表

Javascript动态创建函数列表,javascript,function,Javascript,Function,我有一段JavaScript代码,我想创建一个函数列表。所有函数都将放入字典dd[“a”]将给我函数function(){console.log(“a”)}和d[“b”]将给我函数function(){console.log(“b”)}等。这是我的代码: var a = "abcdefghijklmnopqrstuvwxyz1234567890".split(""); var d = {}; for(var l = a.length, i = 0; i < l; i++) { d[

我有一段
JavaScript
代码,我想创建一个函数列表。所有函数都将放入字典
d
d[“a”]
将给我函数
function(){console.log(“a”)}
d[“b”]
将给我函数
function(){console.log(“b”)}
等。这是我的代码:

var a = "abcdefghijklmnopqrstuvwxyz1234567890".split("");
var d = {};
for(var l = a.length, i = 0; i < l; i++)
{
    d[a[i]] = function(){console.log(a[i])};
}
var a=“abcdefghijklmnopqrstuvxyz1234567890”。拆分(“”);
var d={};
for(var l=a.length,i=0;i
但是,当我运行上述代码时,
d[“a”]
d[“b”]
将是相同的,它们都指向
function(){console.log(a[I])}
。如何得到我想要的


谢谢。

您需要为函数的每个实例指定自己的变量:

for(var l = a.length, i = 0; i < l; i++)
{
  (function (x) {
    d[a[x]] = function(){console.log(a[x])};
  })(i)
}
for(var l=a.length,i=0;i
它们没有指向相同的
function(){console.log(a[i])}
实例,相反,您创建了一组函数,它们都使用了对
i
的相同引用。
i
指向的值在执行
for
循环时发生变化

提供的其他答案也可以,但它需要生成两倍于您需要的函数

function makeLogFunction(whatToLog) {
    return function() {
        console.log(whatToLog);
    }
}

var a = "abcdefghijklmnopqrstuvwxyz1234567890";
var d = {};
for(var l = a.length, i = 0; i < l; i++) {
    d[a[i]] = makeLogFunction(a[i]);
}
函数makeLogFunction(whatToLog){
返回函数(){
控制台日志(whatToLog);
}
}
var a=“abcdefghijklmnopqrstuvxyz1234567890”;
var d={};
for(var l=a.length,i=0;i
在这里,我有一个
makeLogFunction
,它将返回一个总是打印
whatToLog
的新函数。其他答案将在每次循环执行时生成makeLogFunction的新“版本”。对于非常大的数据集,这是对时间和内存的浪费


这种方法增加了清晰性和可重用性的优点。如果在您的循环中发生了大量的逻辑,那么将其封装在一个命名函数中可以让未来的审阅者通过您为该函数指定的名称了解发生了什么。您也可以在应用程序的其他部分中重用该函数。

我在Chrome上运行时遇到错误“SyntaxError:Unexpected token”(“SyntaxError:Unexpected token”)。Chrome是否支持语法?请将外部函数用括号括起来如下:(function(x){…})(I)抱歉,是的,
function(){}()
必须是
(function(){})(
)。