let和const

2018-08-19  本文已影响0人  陶六六

let和const

  1. es5不存在块级作用域,所以在es5中,代码块中定义的变量,函数都会提升到函数顶部;es6存在块作用域,所以只在声明的代码块里有效
  2. 不存在变量提升,声明会绑定当前的块级作用域,在当前作用域声明之前会形成TDZ(暂时性死区)
  3. 在同一作用域里不允许重复声明
  4. const规定定义变量的内存地址保存的值不变,对于简单类型,保存的是具体值,所以相当于常量;声明的变量是数组、对象等复合类型,存储的是指向具体值的指针,所以指向不能变,但内容可变
  5. const声明时必须初始化
  6. 全局定义的const和let变量不会绑定为顶层变量的属性(global/window)

tips

  1. for循的头部和循环体是父子作用域关系,循环体内定义同名变量可以覆盖父作用域定义的变量
        for(let i=0;i<3;i++){
            console.log(i)
        }
        //0
        //1
        //2
        for(let i=0;i<3;i++){
            let i='abc'
            console.log(i)
        }
        //abc
        //abc
        //abc
    
  2. TDZ导致typeof不再是安全操作,在TDZ不能以任何方式引用尚未定义变量
  3. 隐藏的TDZ
        let x=x //ReferenceError: x is not defined 在x定义前使用了x
        function(x=y,y=2){} //ReferenceError: y is not defined 在y定义前将y赋给x
    
  4. 块作用声明必须显示{}包裹
        if(1){
            let a = 1
        }
        //正确
    
        if(1)
            let a = 1
        // 报错
    
  5. es6存在六种声明方式
    • var
    • function
    • let
    • const
    • import
    • class

上一篇 下一篇

猜你喜欢

热点阅读