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(){})(
)。