不使用匿名函数的循环中的闭包-javascript
在使用JSHint对代码进行lint之后,它提出了一个建议,即不要在for循环中创建新函数,如下所示:不使用匿名函数的循环中的闭包-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);
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警告的问题,所以您会没事的。“我尝试过下面这样的代码,但运气不佳。”这到底意味着什么?“有没有办法不创建新函数而从闭包中获益?”闭包是一种函数。没有函数就没有闭包。