【问题标题】:let vs var performance [closed]let vs var 性能[关闭]
【发布时间】:2016-05-04 00:20:15
【问题描述】:

我一直在阅读 ES6 Let 关键字与现有 var 关键字的对比。

我有几个问题。我知道“作用域”是 let 和 var 之间的唯一区别,但它对全局意味着什么?

function allyIlliterate() {
    //tuce is *not* visible out here

    for( let tuce = 0; tuce < 5; tuce++ ) {
        //tuce is only visible in here (and in the for() parentheses)
    };

    //tuce is *not* visible out here
};

function byE40() {
    //nish *is* visible out here

    for( var nish = 0; nish < 5; nish++ ) {
        //nish is visible to the whole function
    };

    //nish *is* visible out here
};

现在我的问题:

  1. 与 var 相比, let 是否具有任何内存(/性能)优势?

  2. 除了浏览器支持之外,我应该使用 let over var 的原因是什么?

  3. 在我的代码工作流程中开始使用 let now over var 是否安全?

谢谢, 回复

【问题讨论】:

  • 你有没有做过任何基准测试来尝试找出答案?这就是证据所在。
  • 我没有尝试过基准测试,但因为您提出了一个好问题,所以我没有尝试过
  • 不确定为什么它被标记为重复。 “重复”链接上没有性能覆盖。但要回答您的问题,it depends。如果您在 Node v6 中使用 ES6 letconst 关键字,那么它无疑会更慢。 Chrome 49 和 52 也出现了一些问题,但 Firefox 46 和 49 在 ES6 letconstvar 之间的性能似乎没有差异。
  • 我认为可以肯定地说,每次迭代生成一个新环境 (let) 比不这样做 (var) 需要更多的资源。这是否对您的代码有任何可衡量的影响取决于您的代码以及引擎如何实现这一点。
  • @FelixKling:不一定。当涉及 JIT 时,可以像 C 编译器通常处理范围一样处理它;词法范围名称的堆栈空间仍然在函数入口处保留并在函数退出时释放,词法范围用于正确性检查并允许名称重用;很少需要在两次使用之间显式清理它。 C++ 编译器也倾向于使用这种 POD 类型,并且它在没有清理保证的垃圾收集语言中工作得更好; JS 可以随时释放资源。

标签: javascript ecmascript-6


【解决方案1】:

let 比 node.js 中的 var 慢得多。无论如何版本v6.3.0。有时这是戏剧性的。如果将 var 替换为 let,下面的代码会慢三倍:

function collatz() {
    var maxsteps = 0;
    var maxval = 0;

    var x = 1;
    var n;
    var steps;

    while (x < 1000000) {
        steps = 0;
        n = x;
        while (n > 1) {
            if (n & 1)
                n = 3*n + 1;
            else
                n = n / 2;
            steps += 1;
        }
        if (steps > maxsteps) {
            maxsteps = steps;
            maxval = x;
        }
        x += 1;
    }
    console.log(maxval + ' - ' + maxsteps + ' steps');
}

collatz();

【讨论】:

  • 看起来节点 v8.11.0 上的性能在 var 和 let 之间基本相同。在我的计算机上,var 和 let 的完成时间在 420 到 480 毫秒之间变化。
猜你喜欢
  • 2016-08-06
  • 2021-09-14
  • 2016-04-05
  • 2014-11-16
  • 2018-06-08
  • 2018-09-28
  • 2012-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多