这是一个更好的做法,这个:
myArray.forEach(function(item)) {
doSomething(item);
function doSomething(an_item) {
console.log(an_item);
}
}
或者这个:
myArray.forEach(function(item)) {
doSomething(item);
}
function doSomething(an_item) {
console.log(an_item);
}
第一个示例是创建函数的多个实例,还是第一次通过循环创建它?
感谢您的任何见解!
答案 0 :(得分:4)
myArray.forEach(function(item)) {
doSomething(item);
}
function doSomething(an_item) {
console.log(an_item);
}
这个功能最好,因为它只会创建一次;
和
myArray.forEach(function(item)) {
doSomething(item);
function doSomething(an_item) {
console.log(an_item);
}
}
由于每次在循环过程中都会创建函数,是错误的
答案 1 :(得分:2)
第二个。使用第二种形式(因为第一种形式会降低用户的体验,可能是手机或低功耗设备),或者更短的形式
myArray.forEach(doSomething);
function doSomething(element, index, array) {
console.log("myArray[" + index + "] = " + element);
}
答案 2 :(得分:2)
如果你问一个关于性能的纯粹问题,这真的取决于解释器,我会想象一些更聪明的问题就足够好,如果它们在循环期间永远不会改变,那么每次都不会创建和破坏函数,但实际上这就是什么你告诉它要做(每次创建函数,因为范围是临时的)所以如果是这样的话,不要感到惊讶。想象一下,如果你在forEach中动态创建一个闭包,那么每个循环都不需要创建一个新的函数副本吗?
http://jsperf.com/closure-vs-name-function-in-a-loop/2
certianly我会想象旧版浏览器不够智能,只知道只做一次。
答案 3 :(得分:2)
我同意其他人的说法,并对第二种解决方案+1。您不希望在循环中定义/创建函数。
**加成
如果你的功能与forloop中的对象有关,你可以在助手中使用 this ,而不是通过参数传递对象:
示例:
var myArray = [{ a: 1 }, { a: 2 }, { a: 3 }];
myArray.forEach(function(item) {
doSomething.call(item);
});
function doSomething(item) {
console.log(this.a);
}
答案 4 :(得分:-4)
优良作法是始终在尽可能小的范围内定义事物。
所以当你不需要其他地方的功能时,在使用它的循环中定义它是最好的选择。