美文网首页
《ECMAScript 6 入门》知识点总结7.19

《ECMAScript 6 入门》知识点总结7.19

作者: Keiko_Yen | 来源:发表于2017-07-19 11:38 被阅读14次

    let命令

    let作用是声明变量,经常使用在for循环里,声明i

    //let声明的变量,只在代码块里有效
            {
                let a=20;
                var b=99;
                console.log(a)
            }
                console.log(b)
                console.log(a) //a is not defined
    

    let的特点

    1.不存在变量提升

    变量提升.png 结果.png

    var 在声明变量 c 之前,c 已经存在了只是值为undefined;而 let 没有变量提升这种现象。

    2.“暂时性死区”(TDZ):代码块内,使用 let 命令声明变量前,该变量都是不可用的。

    ES6明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。

    TDZ.png

    ES6 规定暂时性死区和let、const语句不出现变量提升
    暂时性死区的本质就是,只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。

    3.不允许重复声明变量

    function a(x){
      let x   //Uncaught SyntaxError: Identifier 'x' has already been declared
    }
    function b(x) {
      {
        let x  // 不报错
      }
    }
    

    4.let 提供了一种块级作用域
    ES5 只有全局作用域和函数作用域,ES6新增了块级作用域。

    ES6 允许块级作用域的任意嵌套。
    内层作用域可以定义外层作用域的同名变量。
    块级作用域的出现,实际上使得获得广泛应用的立即执行函数表达式(IIFE)不再必要了。

     {{{{{{{{let age=90;console.log(age)}}}}}}}}  //90
     {{{{{{{{{let age=90}console.log(age)}}}}}}}} 
      //Uncaught ReferenceError: age is not defined 块级作用域
      // 以前的IIFE 
      (function(){
            temp=333;
       })()
       console.log(temp)    //333
      //现在使用let可以这样写
       {
            let temp=333
       }
    

    const

    const声明常量,一旦声明,必须立即赋值,并且值不能改变。

    const num;      //Uncaught SyntaxError: Missing initializer in const declaration
    const num=22;
    num=334;        //Uncaught TypeError: Assignment to constant variable.
    

    const的作用域与let命令相同:只在声明所在的块级作用域内有效。
    const命令声明的常量也是不提升,同样存在暂时性死区,只能在声明的位置后面使用。
    const声明的常量,也与let一样不可重复声明。

    注意:const变量值不能改变的原因:指向的内存地址不能改变。

    ES5 声明变量的方法(2种):var命令和function命令。
    ES6 声明变量的方法(6种):var命令、function命令、let命令、const命令,import命令和class命令。

    顶层对象属性和全局变量

    var命令和function命令声明的全局变量,依旧是顶层对象的属性;另一方面规定,let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性。

    var num1=12;
    console.log(window.num1)    //12
    let num2=16;
    console.log(window.num2)    //undefined
    

    相关文章

      网友评论

          本文标题:《ECMAScript 6 入门》知识点总结7.19

          本文链接:https://www.haomeiwen.com/subject/hpokkxtx.html