我没有问题,只是问一个非常了解 js 的人的问题。是在“每个循环”中声明并运行一个函数更好,还是在外部声明它然后在循环中运行它更好?我在某处读到,如果在每个循环中声明函数,则 JS 编译器处理声明的次数与循环运行的次数相同,但是当您在循环外声明函数时,JS 只处理一次,然后每次都可以轻松运行它环形。在循环外声明函数是正确的还是更好,或者这对 JS 语言来说没有区别,代码执行在两种情况下将花费相同的时间?
最佳答案
在循环中声明的函数确实不是一个函数,它是与循环迭代次数一样多的函数。并不是说这比在循环外有一个函数更好或更坏。
有时这正是您想要的,例如,如果您想要闭包循环内的变量:
// Creates 5 functions and calls them 500 ms apart
for ( let i = 1; i <= 5; i ++ ) {
setTimeout( log_i, i*500 );
function log_i ( ) {
console.log( i );
}
}
或
// Creates 5 functions and calls them 500 ms apart
[1,2,3,'foo','bar'].forEach( function ( x, i ) {
setTimeout( log_x, (i+1)*500 );
function log_x ( ) {
console.log( x );
}
} );
对于常规对象甚至仅包含原始值的变量也是如此。如果每次迭代都需要一个不同的,则必须在循环中声明它(使用 let
或 const
)。如果您可以在所有迭代中共享一个副本,则无需为每次迭代都创建一个副本,但对于小对象和基元,如果它能让您的代码更清晰,您绝对应该创建一个副本。
对于可以在所有迭代中共享的非常大的对象和函数,您通常最好在循环之外创建它,但我强调它需要非常/strong> 大对象或具有数千次迭代的循环才真正重要。
关于JavaScript 在 'each' 循环内外声明函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53135256/