ES6浅析之路一

(我的理解ES6就是对ES5的BUG修改和升级)
废话很少说今天要探讨的是 varlet
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!非要给他定义成一个词汇么?(笑死)!也但愿大牛前来解答探讨!

相关文章
相关标签/搜索