Javascript addEventListener在哪里关闭?

Javascript addEventListener在哪里关闭?,javascript,closures,addeventlistener,Javascript,Closures,Addeventlistener,我了解到可以在循环()中为addEventListener使用闭包 但是,此方法不适用于更复杂的示例: function f(fevent) { var a = document.createElement('a'); a.innerHTML = 'Test'; a.href = '#'; a.addEventListener('click', fevent); return a; }; for (l = 0; l < 2; l += 1) { for (h =

我了解到可以在循环()中为addEventListener使用闭包

但是,此方法不适用于更复杂的示例:

function f(fevent) {
  var a = document.createElement('a');
  a.innerHTML = 'Test';
  a.href = '#';
  a.addEventListener('click', fevent);
  return a;
};

for (l = 0; l < 2; l += 1) {
  for (h = 0; h < 2; h += 1) {
    document.body.appendChild(
    f(function() {alert(l+','+h);})
    );
  }
}
功能f(fevent){
var a=document.createElement('a');
a、 innerHTML='Test';
a、 href='#';
a、 addEventListener('click',fevent);
返回a;
};
对于(l=0;l<2;l+=1){
对于(h=0;h<2;h+=1){
document.body.appendChild(
f(函数(){alert(l+,'+h);})
);
}
}

编辑:我想要的是锚上的单击事件,以提醒不同的组合(0,0)、(1,0)、(0,1)和(1,1)。但它总是发出警报(2,2)

下面是我在上面尝试的闭包方法:

function f(fevent) {
  var a = document.createElement('a');
  a.innerHTML = 'Test';
  a.href = '#';
  a.addEventListener('click', fevent);
  return a;
};

for (l = 0; l < 2; l += 1) {
  for (h = 0; h < 2; h += 1) {
    (function() {
                document.body.appendChild(
                f(function() {alert(l+','+h);})
                );
    }());
  }
功能f(fevent){
var a=document.createElement('a');
a、 innerHTML='Test';
a、 href='#';
a、 addEventListener('click',fevent);
返回a;
};
对于(l=0;l<2;l+=1){
对于(h=0;h<2;h+=1){
(功能(){
document.body.appendChild(
f(函数(){alert(l+,'+h);})
);
}());
}

我还尝试为闭包添加参数:

function f(fevent) {
  var a = document.createElement('a');
  a.innerHTML = 'Test';
  a.href = '#';
  a.addEventListener('click', fevent);
  return a;
};

for (l = 0; l < 2; l += 1) {
  for (h = 0; h < 2; h += 1) {
    (function() {
                document.body.appendChild(
                f(function() {alert(l+','+h);})
                );
    }(l,h));
  }
}
功能f(fevent){
var a=document.createElement('a');
a、 innerHTML='Test';
a、 href='#';
a、 addEventListener('click',fevent);
返回a;
};
对于(l=0;l<2;l+=1){
对于(h=0;h<2;h+=1){
(功能(){
document.body.appendChild(
f(函数(){alert(l+,'+h);})
);
}(l,h));
}
}

也许有人能给我一些启发

编辑:下面是一个使用以下公认解决方案中的方法的工作小提琴:

在代码的最后一行,您将向函数传递两个参数

在第一行,您不接受任何参数

您不使用传递给该函数的值,而是使用循环中的值(循环每次运行时都会更改)

在代码的最后一行,您将向函数传递两个参数

在第一行,您不接受任何参数

您不使用传递给该函数的值,而是使用循环中的值(循环每次运行时都会更改)


请定义“不工作”请定义“不工作”太好了。我想我被上面引用的闭包解决方案弄糊涂了,因为它不带任何变量。我会在我的问题中添加更多的故事。太好了。我想我被上面引用的闭包解决方案弄糊涂了,因为它不带任何变量。我会在我的问题中添加更多的故事。
(function() {
            document.body.appendChild(
            f(function() {alert(l+','+h);})
            );
}(l,h));
(function(my_l, my_h) {
            document.body.appendChild(
            f(function() {alert(my_l+','+my_h);})
            );
}(l,h));