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

2019-08-06  本文已影响0人  学的会的前端

let和const

// 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 //局部变量
}
}
function fn(){
 if(true){
    console.log(a)   //代码不会报错
}else{
    var a  //a还是被声明了
//此时这个地方的代码不会执行
  console.log(2)
  }
}
//以下代码还是会暴露两个全局变量a,frank解决办法,用一个带有函数名的函数把所有的代码包裹起来。
//此时,a才是局部变量,frank是全局变量,但此时函数也是全局便变量。
{
  var a
  window. frank = function(){
    console.log(a)
  }
}

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

 !function(){
        var a = 1
        window.frank = function(){
            console.log(a)
        }
    }()
{
  let a = 1
  window.frank = function(){
    console.log(a)  
  }
}
console.log(a) //a is not defined
{
  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
    }
  }
}
{
  let a = 1
  let a = 2 //报错(不可以重复声明)
  //------------------
  let a = 1
  a = 2 //允许,不会报错(允许重复赋值)
  //---------------------
  const a = 1
  a = 2//报错(只有一次声明及赋值)
  //------
const a //报错(一定要在声明的时候赋值)

}

总结:

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

猜你喜欢

热点阅读