gpt4 book ai didi

javascript - 循环内的函数,为什么它们被认为是 'error'

转载 作者:行者123 更新时间:2023-11-29 16:13:25 25 4
gpt4 key购买 nike

对于在循环中声明的复杂函数,我明白为什么我不想这样做,但为什么它会被认为是糟糕的 javascript?

当然,我们可以命名该函数并将其放在循环之外,但会扰乱一些简单的流程(没有异步)。

例如,下面是一个循环内的简单内联函数声明(JSHINT/LINT 提示,为什么这被认为是不行的?

for (var i = 0, len=arr.length; i < len; ++i) {

dosomething(arr[i], function(returnvalue) {
console.log(returnvalue);
});

};

最佳答案

这就是您不想要的原因之一。该函数引用相同的变量。

http://jsfiddle.net/RCzyF/

var a = [];

for(var i=0; i<10; i++) {
a.push(function () {
return i;
});
}

h = "";
for(var j=0; j<10; j++) {
h += "" + a[j]();
}

alert(h);

人们可能希望看到 0123456789 但它会将 10 附加到 h 10 次。当一个函数可能会更改其他函数的内容时,它会使代码真的很难理解。

这是一个更复杂的例子,说明事情可能会出错。

var a = [];

for(var i=0; i<10; i++) {
a.push(function () {
return i++;
});
}

h = "";
for(var j=0; j<10; j++) {
h += "" + a[j]();
}

alert(h);

创建函数时,它们指向相同的词法范围。执行函数时,它们会更改函数内部的值,并且数组中的每个函数仍然指向相同的值。当变量被修改但您没有直接修改它时,这可能会导致很难调试的错误。

这也是来自 jslint 本身的真正答案:http://jslinterrors.com/dont-make-functions-within-a-loop/

关于javascript - 循环内的函数,为什么它们被认为是 'error',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21510331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com