在用JSHint绘制我的代码之后,它提出了一个建议,不要在for循环中创建新函数,如下所示:
for (var i = 0; i < AnArray.length; i++){
// code that creates an element
(function(_i) {
element.addEventListener(
"click",
function() { DoSomething(_i); }
);
})(i);
}
DoSomething(arg)执行与该Array实体相关的操作。我尝试过如下代码,没有运气。
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);
}
答案 0 :(得分:2)
我尝试过如下代码,没有运气。
您过度思考代码。你的括号太多了。你只需要调用该函数。返回值为undefined
,您不需要调用它。您还需要保持变量名称。
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]);
}
从长远来看,这是我应该担心的吗?
单独创建函数可以使代码更清晰,更易于阅读。它具有较少的嵌套范围,因此更容易跟踪哪个变量。
有没有办法不创建新功能但获得闭包的好处?
您可能正在寻找at the end of this answer所述的let
。