变量在错误的范围内(可能需要一个闭包?)

时间:2011-10-13 16:18:41

标签: javascript closures lexical-closures

我有以下需要封闭的代码:

var numItems = document.getElementsByClassName('l').length;
for (var i = 0; i < numItems; i++) {
  document.getElementsByClassName('l')[i].onclick = function (e){
    preview(this.href, i);
  };
}

无论何时单击某个项目,都会为i

预览相同的数字

我怀疑我需要做的是

function indexClosure(i) {
  return function(e) {
    preview(this.href, i);
  }
}

并指定onclick如下:

document.getElementsByClassName('l')[i].onclick = indexClosure(i);

但是this将不再引用我的链接......这个问题是如何解决的?

2 个答案:

答案 0 :(得分:3)

使用闭包来捕获循环的计数器:

var numItems = document.getElementsByClassName('l').length;
for (var i = 0; i < numItems; i++) {
  (function(i){
    document.getElementsByClassName('l')[i].onclick = function (e){
      preview(this.href, i);
    };
  }(i))
}

答案 1 :(得分:0)

没有点击(sender, eventArgs)传递,允许您通过this访问sender