JavaScript 在 'each' 循环内外声明函数

标签 javascript function

我没有问题,只是问一个非常了解 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 );
    }
} );

对于常规对象甚至仅包含原始值的变量也是如此。如果每次迭代都需要一个不同的,则必须在循环中声明它(使用 letconst)。如果您可以在所有迭代中共享一个副本,则无需为每次迭代都创建一个副本,但对于小对象和基元,如果它能让您的代码更清晰,您绝对应该创建一个副本。

对于可以在所有迭代中共享的非常大的对象和函数,您通常最好在循环之外创建它,但我强调它需要非常/strong> 大对象或具有数千次迭代的循环才真正重要。

关于JavaScript 在 'each' 循环内外声明函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53135256/

相关文章:

javascript - 当前的 XHR 实现是否利用了 HTTP/2?

javascript - 点击第三层菜单项后如何关闭菜单

c++ - 这样做的正确方法是什么?调用指向指向指针的指针内部的函数?

javascript - 两个功能相互干扰

c++ - 如何使用 FFmpeg 将立体声转换为单声道?

javascript - 如何使用 HTML5 从文件夹中的文件创建动态播放列表

javascript - 带下拉菜单的切换按钮 - bootstrap

javascript - 如果存在值(value),就这样做。未定义与空?

javascript - 分号、期望和(结束)

c - 下面问题中的函数 f(a,b) 是什么意思?