示例需要在javascript中for循环内部的回调函数

Spi*_*lot 1 javascript arrays for-loop callback

我正在寻找一些简单而直接的东西,我在堆栈上提取的大部分内容都不是我需要的东西.我有一个数组,我希望在每次迭代后调用函数时循环.那会是什么样的?

ver*_*loc 5

我假设你遇到问题,因为在Javascript中处理闭包的方式.Douglas Crockford在他的书中通过使用一个将click事件处理程序分配给一组节点的函数的例子来讨论这个问题."直观"的方式是:

var addHandlers=function(nodes){
    var i;
    for(i=0; i<nodes.length;++i){
        nodes[i].onClick= function {
            alert (i);
        };
    }
};
Run Code Online (Sandbox Code Playgroud)

但是,这不正确:每个onClick回调都会显示相同的值i = nodes.length-1.这是因为i未复制值,而是在每个内部函数中引用.更好的方法是创建一个返回回调的辅助函数,类似于以下内容:

var addHandlers = function (nodes) {
    var helper = function (i){
        return function (e){
            alert (i);
        }
    }
    for (int i =0; i<nodes.length();i++){
        nodes [i].onClick=helper (i);
    }
}
Run Code Online (Sandbox Code Playgroud)

此外,这允许您避免在每次迭代时创建函数.