不使用匿名函数的循环中的闭包-javascript

不使用匿名函数的循环中的闭包-javascript,javascript,closures,Javascript,Closures,在使用JSHint对代码进行lint之后,它提出了一个建议,即不要在for循环中创建新函数,如下所示: for (var i = 0; i < AnArray.length; i++){ // code that creates an element (function(_i) { element.addEventListener( "click", function() { DoSomething(_i);

在使用JSHint对代码进行lint之后,它提出了一个建议,即不要在for循环中创建新函数,如下所示:

for (var i = 0; i < AnArray.length; i++){
    // code that creates an element
    (function(_i) {
        element.addEventListener(
            "click",
            function() { DoSomething(_i); }
        );
    })(i);
}
for(变量i=0;i
其中DoSomething(arg)执行与该数组实体相关的操作。我尝试过下面这样的代码,但运气不好

function RegisterClick (elem, i) {
    elem.addEventListener(
        "click",
        function() { DoSomething(_i) }
    )
}

for (var i = 0; i < AnArray.length; i++){
    // code that creates an element
    (RegisterClick (_elem, _i)) (element, i);
}
功能寄存器点击(elem,i){
元素添加列表器(
“点击”,
函数(){DoSomething(_i)}
)
}
对于(变量i=0;i
  • 从长远来看,这是我应该担心的事情吗
  • 有没有办法不创建新函数,而是从闭包中获益
  • 我尝试过下面这样的代码,但运气不好

    function RegisterClick (elem, i) {
        elem.addEventListener(
            "click",
            function() { DoSomething(_i) }
        )
    }
    
    for (var i = 0; i < AnArray.length; i++){
        // code that creates an element
        (RegisterClick (_elem, _i)) (element, i);
    }
    
    你在考虑你的代码。你的括号太多了。你只需要调用这个函数。返回值是未定义的,您不需要调用它。您还需要保持变量名的正确性

    function register_click(elem, i) {
        elem.addEventListener(
            "click",
            function() { DoSomething(i) }
        );
    }
    
    var _elem = something_that_gets_an_element();
    
    for (var i = 0; i < an_array.length; i++){
        register_click(_elem, an_array[i]);
    }
    
    功能寄存器\u单击(元素,i){
    元素添加列表器(
    “点击”,
    函数(){DoSomething(i)}
    );
    }
    var _elem=某个东西,它得到一个元素();
    for(var i=0;i
    从长远来看,这是我应该担心的事情吗

    单独创建函数可以使代码更清晰,更易于阅读。它的嵌套作用域更少,因此更容易跟踪哪个变量是哪个变量

    有没有办法不创建新函数,而是从闭包中获益

    您可能正在查找所述的
    let

    “它提出了一个建议,不要在for循环中创建新函数”,对,但您使用iLife可以准确地防止JSHint警告的问题,所以您会没事的。“我尝试过下面这样的代码,但运气不佳。”这到底意味着什么?“有没有办法不创建新函数而从闭包中获益?”闭包是一种函数。没有函数就没有闭包。