ES6 JavaScript - 在内部使用常量还是让外部循环?

Max*_*x K 5 javascript performance loops constants let

出于性能目的,我想知道 ES6 JavaScript 之间的区别:

var list = [...];
let item; //let outside the loop
for (let i = 0; i < list.length; i++) {
    item = list[i];
}
Run Code Online (Sandbox Code Playgroud)

var list = [...];
for (let i = 0; i < list.length; i++) {
    const item = list[i]; //const inside the loop
}
Run Code Online (Sandbox Code Playgroud)

假设该item变量旨在在循环内保持不变。

有推荐吗?相对于性能而言,每种方法的优缺点是什么?GC 处理它们的方式不同吗?

请注意,这是微优化。此外,性能取决于所使用的 JS 引擎。(见答案)

ajx*_*jxs 6

考虑到不同的浏览器具有截然不同的内部实现,很难给出明确的答案。很可能有零差异。在执行之前,浏览器中的 Javascript 由内部 JIT 编译器编译,它很可能会识别循环中的冗余变量声明并优化它,就像任何其他好的编译器一样。let并且const肯定会影响这一点,我会说const考虑到编译器可以立即看到它是特定于内部循环范围的不可变原子变量,这将使循环外的优化更有可能。它也可能会展开性能密集型循环。Javascript 还有一些其他的性能怪癖,尽管在更高范围内访问变量会导致轻微的性能损失,我记得很久以前在浏览器中执行 gamdev 时研究过这一点。这可能不再是当前的了,但那是几年前的事了。

正如其他人指出的那样,除非分析已经表明这是您的应用程序中的严重瓶颈,否则这是过早的优化。如果优化这可能会带来任何显着的性能优势,我会非常震惊。如果这方面的性能很重要,最好的建议是自己分析不同的场景,然后决定什么最适合您的用例。