现代 JavaScript 引擎中全局变量仍然比局部变量慢吗?

问题描述 投票:0回答:1

我最近阅读了《高性能 JavaScript》(2010),其中指出:

标识符存在于执行上下文的作用域链中越深,读取和写入的访问速度就越慢。因此,局部变量总是在函数内部访问最快的,而全局变量通常是最慢的。请记住,全局变量始终存在于执行上下文作用域链的最后一个变量对象中,因此它们始终距离解析最远。

考虑到过去十年 JavaScript 引擎的大幅优化,我想知道这个说法在 2024 年是否仍然准确?

let globalVar = 0;

function testVariables() {
    let localVar = 0;
    let globalStartTime = performance.now();

    for (let i = 0; i < 5000000; i++) {
        globalVar += 1;
    }
    let globalEndTime = performance.now();

    let localStartTime = performance.now();

    for (let i = 0; i < 5000000; i++) {
        localVar += 1;
    }
    let localEndTime = performance.now();

    console.log(`Global variable access time: ${globalEndTime - globalStartTime} ms`);
    console.log(`Local variable access time: ${localEndTime - localStartTime} ms`);
}

testVariables();

输出为: 全局变量访问时间:25.80000001192093 ms 局部变量访问时间:11.400000035762787 ms

全局变量的访问时间肯定比局部变量要长,但我仍然不确定作用域链遍历是否是其背后的主要原因。或许还有其他原因?

javascript variables scope scope-chain
1个回答
0
投票

我认为另一个原因是,如果全局命名空间中有变量,那么外部可以更改该变量,并且它将强制解释器每次通过循环重新加载该值。 因此使其比局部变量慢

© www.soinside.com 2019 - 2024. All rights reserved.