美文网首页
ES6 —— let和const

ES6 —— let和const

作者: roylai | 来源:发表于2017-08-30 10:16 被阅读0次

    let

    let声明一个变量,与var最不同的地方在于。let拥有块级作用域,{ } 所包裹住的地方即为一个块级作用域。

    块级作用域中声明的变量在外部无法访问,for循环中:

    
    for(let i = 0; i<3;i++){
      let i = 12
      console.log(i)
    }
    // 输出3次12
    
    

    for 循环有两个块级作用域,设置循环变量的是父作用域,{}中的是子作用域。

    
    let arr =[]
    for (let i = 0;i<3;i++){
      console.log(i)
      arr.push(function(){
          console.log(i)
      })
    }
    console.log(i)
    console.log(arr[1]())
    // 输出 0 ,1 ,2
    // 输出 i not defined
    // 输出 1
    
    for (var i = 0; i<3; i++){
      console.log(i)
      arr.push(function(){
        console.log(i)
      })
    }
    console.log(i)
    console.log(arr[1]())
    // 输出 0 ,1 ,2
    // 输出3
    // 输出3
    
    

    let i 只执行了一次,但由于let的创建是尊重块级作用域的,所以每次循环都是一个新的i,值是i++的结果,所以闭包引用的i的地址都是不同的。用var声明的i都是同一个地址,所以闭包的结果是相同的。

    暂时性死区和不允许重复声明

    在一个块级作用域中,let和const声明的变量就绑定了这个区域,外部声明的与之无关。在块级作用域中声明之前引用这两个变量会报错,称之为暂时性死区。

    let a = 1 
    if (true) {
      console.log(a)   // a is not defined
      let a = 2
      console.log(a)   // a has already been declared
    }
    

    let 和const不存在变量提升,不同于var

    相关文章

      网友评论

          本文标题:ES6 —— let和const

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