【ES6 笔记】var、let、const

2018-10-24  本文已影响0人  ___Jing___

最近在整理笔记,先从ES6相关开始,自己写笔记的时候只是将书中重点部分简单记了一下,现在尽量整理成方便理解和阅读的方式。

关键字 变量提升(Hoisting) 块级声明 重复声明 修改赋值 临时死区 循环中块作用域绑定 全局块作用域绑定
var Yes No Yes Yes No No No
let No Yes No Yes Yes Yes Yes
const No Yes No No Yes Yes Yes
        function getValue(condition){
            //实际相当于在这里定义了 var value; =>变量提升
            if(condition){
                console.log(value) //undefined
                var value = 'blue';  //这里相当于赋值  value=“blue”
                console.log(value) //blue
                return value
            }else{
                console.log(value) //undefined
                return null;
            }
            console.log(value) //undefined
        }
        function getValue(condition){
            //let或是const关键字定义的变量不会提升,只存在声明的块中,这里访问报错
            if(condition){
                console.log(value)  //变量不会提升,这里访问报错
                let value = 'blue';  
                console.log(value) //blue
                return value
            }else{
                console.log(value)  //变量不会提升,这里变量不存在,这里访问报错
                return null;
            }
            console.log(value) //变量不会提升,这里变量不存在,这里访问报错
        }
        console.log(typeof value) //undefined 在声明变量value作用域之外
        if(true){
            console.log(type of value)  //抛错,value变量声明所在的作用域内,变量还没声明,尚在所谓的临时死区中
            //value变量在所在作用域内的临时死区内,在该区域,value变量声明之后,才会从TDZ(temporal dead zone 临时死区)中移出来
            let value = 'blue'
        }
      for(var i=0;i<10;i++){ 
          //do something 
      }  
      console.log(i) //10
      //由于var声明的变量进行了变量提升,所以循环结束后i仍可以访问

     for(let i=0;i<10;i++){ 
          //do something
     }  
    console.log(i) //报错
    //let声明的变量只在循环中存在,循环结束后,其他地方无法访问该变量       
        var hello = 'hello';
        let  world = 'world';
        console.log(window.hello)//hello
        console.log(window.world)//undefined

       // var变量在全局作用下声明的变量,会覆盖window上的同名属性,而let声明的变量不会修改window上的属性;
上一篇 下一篇

猜你喜欢

热点阅读