几个范围的Javascript闭包问题

时间:2013-03-28 15:22:50

标签: javascript closures

使用jsavascript中的闭包解决此问题的最佳方法是什么?

这是我有一个简单的问题:

10次跨度和onclick事件(我希望每次点击都有阻止警报的数量):

var spans = document.getElementsByTagName('span');

function addEvents(divs) {
    for(var i=0; i < divs.length; i++) {
        divs[i].innerHTML = i;
        divs[i].onclick = function() { alert(i) }
    }
}

addEvents(spans);

JSFiddle link

1 个答案:

答案 0 :(得分:1)

将其包裹在一个自动执行的闭包中:

divs[i].onclick = (function(i) {
    return function() {
        alert(i);
    };
})(i);

为了缩短它:将其定义为回调:

var callback = function(i) {
    return function() { alert(i); };
};

divs[i].onclick = callback(i);