美文网首页
ES6---新版变量声明:let和cons

ES6---新版变量声明:let和cons

作者: 学的会的前端 | 来源:发表于2019-08-06 18:24 被阅读0次

    let和const

    • a = 1会声明一个全局变量是错的,只有在没有a这个变量的时候,a = 1才会声明一个全局变量。所以a = 1含义不明,所以尽量不要使用a= 1
    // 1.情况
    a = 1 //声明一个全局变量
    console.log(window.a)
    //2.情况
    var a
    function fn(){a = 1 //a不一定是全局变量,外面有var a,所以此时只是给a赋值,也是全局变量
    }
    //3.情况
    var a 
    function fn(){
    var a 
    function fn2(){
      a = 1 //局部变量
    }
    }
    
    • var a不管写在哪里,都会有一个声明提升。
    function fn(){
     if(true){
        console.log(a)   //代码不会报错
    }else{
        var a  //a还是被声明了
    //此时这个地方的代码不会执行
      console.log(2)
      }
    }
    
    • var a = 1会不小心暴露全局变量window.a
    //以下代码还是会暴露两个全局变量a,frank解决办法,用一个带有函数名的函数把所有的代码包裹起来。
    //此时,a才是局部变量,frank是全局变量,但此时函数也是全局便变量。
    {
      var a
      window. frank = function(){
        console.log(a)
      }
    }
    

    以上代码的解决方案是:用一个立即执行的匿名函数包裹所有的代码,就可以避免a的提升。

     !function(){
            var a = 1
            window.frank = function(){
                console.log(a)
            }
        }()
    
    • let 不暴露全局变量,let就是写在哪,位置就在哪,不会有变量的提升。
    • let 的作用域遇到{ }就停止。
    {
      let a = 1
      window.frank = function(){
        console.log(a)  
      }
    }
    console.log(a) //a is not defined
    
    • let也是可以嵌套的。要先声明在使用。(存在Temp Dead Zone)
    {
      let a = 1
      console.log(a) // 1
      {
        console.log(a) // 报错(Temp Dead Zone)这是临时死区
        let a = 2
        console.log(a) //2
        {
          let a = 3
          cosole.log(a) //3
        }
      }
    }
    
    • const和let差不多,但是const只有一次赋值机会,后面在赋值,就会报错。const主要应用在常量上,例如PI
    {
      let a = 1
      let a = 2 //报错(不可以重复声明)
      //------------------
      let a = 1
      a = 2 //允许,不会报错(允许重复赋值)
      //---------------------
      const a = 1
      a = 2//报错(只有一次声明及赋值)
      //------
    const a //报错(一定要在声明的时候赋值)
    
    }
    

    总结:

    • let的总结
    1. let 的作用域在最近的{}之间;
    2. 如果你在let a之前使用a,那么报错(一定要先声明,在使用);
    3. 如果重复let a那么,报错;
    4. let的作用:为了方便的使用局部变量,而不需要引入立即执行函数
    • cnst的总结
    1. 1,2,3同上。
    2. 只有一次赋值机会,而且在声明的时候立马赋值。
    3. 一般常量赋值使用const,比如PI。

    相关文章

      网友评论

          本文标题:ES6---新版变量声明:let和cons

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