Javascript 动态创建一个函数列表
Javascript create a list of functions dynamically
我有一段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])};
}
但是,当我运行上面的代码时,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)
}
它们不指向相同的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
的新函数。其他答案将在每次循环执行时生成makeLogFunction的新"版本"。对于非常大的数据集,这是浪费时间和内存。
这种方法增加了清晰度和可重用性的优点。如果循环中发生了大量逻辑,则将其封装在命名函数中可以让未来的审阅者通过您为函数指定的名称来了解正在发生的事情。您还可以在应用程序的其他部分中重用该函数。
相关文章:
- 我可以在json对象中添加一个函数吗
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 在另一个函数中使用变量this
- 在另一个函数成功结束后调用该函数
- mongoose.connect undefined不是一个函数
- 监听器必须是一个函数
- 使用JS函数来使用另一个函数的语法?node.js
- 如何取消object.prototypes javascript的一个函数
- 从Chrome扩展名中的popup.html文件在background.js文件中运行一个函数
- 嵌套到另一个函数中的Fancybox函数;不起作用
- 如何在javascript中使用不止一个函数
- jQuery-在页面加载时执行一个函数
- jquery UI draggable:UI.children不是一个函数
- jQuery Mobile Undefined不是一个函数
- 如何在php中创建一个函数,该函数与文本区域一起工作,通过输入类似[color:red]的内容来打印具有等效颜色的文本
- javascript函数将数据添加到屏幕,但随后被另一个函数覆盖
- JS异常:animate不是一个函数
- 如何将一个函数附加到一个不存在的元素上
- JavaScript/jQuery-添加添加和删除类与下一个函数之间的延迟