简单迭代问题

好的,所以基本上我有一个数组的函数,这些函数用于设置不同的菜单.第一个函数设置主菜单和其他菜单/页面的链接.注意我写了addEvent,自我解释性和被测试和作品.

选择 | 换行 | 行号
  1. var buttons = ["MenuX", "MenuY", "MenuZ", "MenuZZ"];
  2. var menu_page_generators = [
  3.         function(m, mel){// Main Menu
  4.             for(var id=0;id<buttons.length;id++){
  5.                 var t = document.createElement("div");
  6.                 t.className = "menu-button";
  7.                 t.appendChild(document.createTextNode("["+buttons[id]+"]"));
  8.                 var func = function(){alert(id);};
  9.                 addEvent(t, "click", func);
  10.                 mel.appendChild(t);
  11.             }
  12.         },
  13.         function(m, mel){// ...
  14.             alert('hi2');
  15.         }
  16.     ];
  17.  

所以这段代码应该做的是什么.它应该创建4个按钮,每个按钮名为MenuX MenuY,等,当你点击按钮X应该警惕"1",Y按钮应该警惕"2"等现在这个问题.正确名字的每个按钮,所以正确的id变量显然是被应用在按钮创建.然而当你点击各个按钮都警惕"4".所以很明显,所有的按钮都不把"id"变量函数时被创建,但"id"按钮点击(后循环已经完成和id = 4).我不明白为什么要这样做?我真的很想把这个固定的,任何帮助会apreciated得多.干杯,乔希

# 回答1

你无意中形成了一个关闭8号线.要摆脱这种你可以写元素的价值属性和访问,通过这.(’年代我唯一能记住现在)
# 回答2

我不知道是否关闭无意中——它只是闭包id的最后价值(这是一个问题,for循环)……所以当你创建一个"真实的"或"显式"关闭它的工作(如下面):

选择 | 换行 | 行号
  1. var func = function(val) {
  2.     return function() { alert(val) };
  3. }(id);

亲切的问候

标签: Javascript

添加新评论