【发布时间】:2013-06-25 03:38:37
【问题描述】:
我确定以前有人问过这个问题,但我不知道要搜索什么。
所以我希望使用与单击的项目相对应的字符串调用函数,但我只想将任何新项目添加到字符串数组中。
var menuList = ["overview", "help", "search"];
var functionCalls = [
function() { toggleMenu(menuList[0]); },
function() { toggleMenu(menuList[1]); },
function() { toggleMenu(menuList[2]); },
];
在循环中这样使用:$("something").click(functionCalls[i])
这是我想要做的(但显然它不起作用):
for (var i in menuList) {
// This does not work because the closure references 'i'
// which, at the end, is always the index of the last element
$("something").click(function() {
toggleMenu(menuList[i]);
});
// this works, but I have to define each closure
$("something").click(functionCalls[i]);
}
如何创建一个接受基于变量的值但不保留对变量的引用的匿名函数?
【问题讨论】:
-
不要使用
for ... in在 JavaScript 中遍历数组。请改用索引变量和简单的for循环。 -
这个问题有很多很多重复。这是 JavaScript 中一个极其常见的陷阱。
-
这就是为什么我注意到我确信以前有人问过它。我只是对 JS 不够熟悉,不知道如何正确处理它,或者搜索什么。
-
别难过——我不是故意要批评的。可能很难找到重复项,因为相同的基本问题以许多不同的方式表现出来。归结为 JavaScript 范围仅在函数级别,因此像 Sirko 发布的技巧是必要的。
标签: javascript closures