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