我没有问题,只是对一个非常了解js的人的一个问题。是在“每个循环”中声明并运行一个函数还是在外部进行声明然后在循环中运行更好?我在某处读到,如果在每个循环中声明函数,则JS编译器进程声明的循环次数与循环将运行的时间相同,但是当您在循环JS进程外部声明函数时,它只运行一次,然后可以轻松地每次运行它。环。在循环外声明函数是否正确,是否更好?或者在两种情况下,JS语言和代码执行都将花费相同的时间?
答案 0 :(得分:2)
的确,在循环中声明的函数不是一个函数,它的数量与循环的迭代次数一样多。并非总比在循环外具有单个功能好还是坏。
有时候正是您想要的,例如,如果您想从循环内部封闭变量:
// 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>大对象或具有数千次迭代的循环确实很重要。
答案 1 :(得分:0)
我个人更喜欢在循环外声明函数,因为正如您已经注意到的,它们仅被处理一次。由于循环的本质是迭代,因此JS将不断调用并创建函数。这可能会导致性能问题。但是,这并不是说您永远不要使用这种方法。这完全取决于您的程序的体系结构和逻辑。
答案 2 :(得分:0)
在每个循环中声明该函数没有任何意义。您可以在循环外部声明该函数,并最终为每个循环传递不同的参数,以调用外部声明的函数。