(我的理解ES6就是对ES5的BUG修改和升级)
废话很少说今天要探讨的是 var与let
ECMAScript 6 入门 做者:阮一峰es6
下面是我的总结:
let不容许在相同做用域内,重复声明同一个变量。
let 特色是块级做用域code
先来看一下ES5中时常出现的变量提高的问题!ip
var tmp = new Date(); function f() { console.log(tmp); if(false) { var tmp = 'hello world'; } console.log(tmp); }
输出结果为undefined,缘由在于变量提高,致使内层的tmp变量覆盖了外层的tmp变量。作用域
在ES6的语法中解决的变量提高的问题 是这么实现的!get
function f1() { let n = 5; if (true) { let n = 10; } console.log(n); // 5 }
这里你们能够本身试验 将内层 和外层的 n 分别用var let 来定义 就发现
let不容许在相同做用域内,重复声明同一个变量。
lef 特色是块级做用域
let 的特色获得明显的体现!io
再看一个ES5中的循环变量泄露为全局变量console
var s = 'hello'; for (var i = 0; i < s.length; i++) { console.log(s[i]); } console.log(i); // 5
很明显i成了全局变量。
ES6中入门
for (let i = 0; i < 10; i++) { // ... } console.log(i); // ReferenceError: i is not defined
这代表,let声明的变量只在它所在的代码块有效。 function
本人目前了解的还不够深!
好比ES6中添加一个新的词汇 “暂时性死区”(temporal dead zone,简称 TDZ)。变量
var tmp = 123; if (true) { tmp = 'abc'; // ReferenceError let tmp; }
我能够把它理解为ES6解决不了的BUG!非要给他定义成一个词汇么?(笑死)!也但愿大牛前来解答探讨!