var和ES6的let
概述
- 通过
var
定义的变量,它的作用域是在 function 或任何外部已经被声明的 function,是全域的 。 - 透過
let
定义的变量,它的作用域是在一個块(block)。
1 | function varvslet() { |
详细的区别
变量提升
let
不會被提升到整个块的作用域。相比之下,var
可以被提升。
1 | { |
循环中的闭包
let
在每次循环可以重新被 bind,确保在它之前结束的循环被重新赋值,所以在闭包中它被用來避免一些问题。
1 | for (var i = 0; i < 5; ++i) { |
使用 let
替换 var
1 | // print 1, 2, 3, 4, 5 |
我们应该用 let
替代 var
嗎?
不是的,
let
是新的块作用域。语法强调在var
已经是区块作用域时時,let
应该替换var
,否则请不要替换var
。let
改善了在 JS 作用域的选项,而不是取代。var
对于变量依旧是有用的,可被用在整個 function 之中。
let
兼容性
在 server 端,比如 Node.js,你现在可以安心的使用
let
。在 client 端,通过 transpiler(比如 Traceur),可以安心的使用
let
语法。否则请在这里确认你的浏览器是否支持。
Playground
更多信息
原文作者: anhr
原文链接: http://yoursite.com/2019/11/04/javascript/2016-08-25-keyword-var-vs-let/
版权声明: 转载请注明出处(必须保留原文作者署名原文链接)