1

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

因此,我希望使用与单击的项目相对应的字符串调用函数,但我只想将任何新项目添加到字符串数组中。

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]);
}

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

4

1 回答 1

3

你可以像这样使用 IIFE:

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

i通过调用匿名函数,您可以创建名称为 的当前值的本地副本index。因此,所有处理程序都会收到各自版本的i.

于 2013-06-27T14:57:10.420 回答