JavaScript中的变量有多贵?

Tom*_*Tom 4 javascript performance

在主流浏览器中,JavaScript中的局部变量(var v),全局变量(window.v)和跨全局变量(parent.v)有多贵?有没有人对这个进行过任何好的测试?

str*_*ger 8

忽略解释器/解析器的优点和缺点,重要的是运行时必须查看作用域链的一部分.

考虑这个简单的例子:

foo = 42;         // implicitly window.foo; cost: 2
var bar = 3;      // cost: 1

function woot(a) {
    a;            // cost: 1
    bar;          // cost: 2
    foo;          // cost: 3

    var other = 9;// cost: 1

    other;        // cost: 1

    a.something;  // cost: 2
    foo.win.fail.arg.func(a.something).thing = 0; // cost: 8 + 2
}

woot(bar);        // cost: 2 + 1
Run Code Online (Sandbox Code Playgroud)

请记住,函数与变量(我认为)共享相同的名称空间,并且就解决方案而言就像变量一样.

除了可能通过Javscript引擎进行优化之外,使用foo['bar']而不是额外的成本foo.bar(尽管如果你优化后者,如果内容是文字的话,应该很容易优化前者).