Javascript 具有作用域问题的匿名函数调用

Javascript 具有作用域问题的匿名函数调用,javascript,closures,Javascript,Closures,我肯定以前有人问过这个问题,但我不知道该搜索什么 所以我想用一个与单击的项对应的字符串调用函数,但我只想将任何新项添加到字符串数组中 var menuList = ["overview", "help", "search"]; var functionCalls = [ function() { toggleMenu(menuList[0]); }, function() { toggleMenu(menuList[1]); }, function() { toggleMenu(me

我肯定以前有人问过这个问题,但我不知道该搜索什么

所以我想用一个与单击的项对应的字符串调用函数,但我只想将任何新项添加到字符串数组中

var menuList = ["overview", "help", "search"];
var functionCalls = [
  function() { toggleMenu(menuList[0]); },
  function() { toggleMenu(menuList[1]); },
  function() { toggleMenu(menuList[2]); },
];
在循环中这样使用:
$(“某物”)。单击(functionCalls[i])

这就是我想要做的(但显然不行):


如何创建一个匿名函数,该函数接受基于变量的值,但不保留对变量的引用?

您可以使用这样的IIFE:

for (var i=0; i<menuList.length; i++) {
  !function( index ) {
    $("something").click(function() {
      toggleMenu( menuList[index] ); 
    });
  }( i );
}

用于(var i=0;我不使用
for…in
在JavaScript中迭代数组。而是使用一个索引变量和一个简单的
for
循环。这个问题有很多重复的地方。这是JavaScript中一个非常常见的陷阱。这就是为什么我注意到我以前肯定有人问过它。我只是对JS不够熟悉,无法回答知道如何正确处理它,或者搜索什么。别难过-我不是有意批评。很难找到重复的,因为相同的基本问题以许多不同的方式表现出来。归结起来,JavaScript的作用域只是在函数级别,所以像Sirko发布的技巧是必要的。这就是为什么我在找的。谢谢!
for (var i=0; i<menuList.length; i++) {
  !function( index ) {
    $("something").click(function() {
      toggleMenu( menuList[index] ); 
    });
  }( i );
}