美文网首页
【ES6 笔记】var、let、const

【ES6 笔记】var、let、const

作者: ___Jing___ | 来源:发表于2018-10-24 17:57 被阅读0次

最近在整理笔记,先从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
  • 关于变量提升:
    在函数作用域或是全局作用域中通过var关键字声明的变量,无论实际在哪里声明,都会被当成在当前作用域顶部声明的变量,这就是提升机制。
        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) //变量不会提升,这里变量不存在,这里访问报错
        }
  • 关于重复声明:
    1. var关键字声明的变量,重复声明的时候,后声明的会覆盖先声明的;
    2. let和const关键字声明的变量,如果在作用域中已经存在了,重复声明的时候就会报错
  • 关于修改赋值:
    const关键字声明的是常量,一旦定义,就不能再修改了,也因此在初始化的时候就需要进行赋值,否则会抛错,其他两个关键字可以先声明后赋值,也可以赋值以后再进行修改。

  • 关于临时死区:

        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上的属性;

相关文章

  • ES6 学习笔记

    ES6 var let const 的使用 var let const 声明变量 全局作用域 和 块级作用域的区...

  • 总结一下前端常见javascript基础面试题:

    1.var ,let 和const的区别: let和const是es6新增的语法, let和var都可以定义变量,...

  • javascript碎片知识000

    const let var 3者的区别。 const 和 let 为es6新增的定义变量的关键字。 var存在...

  • (JS)

    ES6 let、const和var的区别 let和const声明变量不存在变量提升 let和const不能重复声明...

  • react 入门基础(一)之ES6

    ####ES6 let const var 三者的区别 ### 1. let const 不能重复声明变...

  • es6,es7,es8语法总结

    ES6 1. var let const let,const具有块级作用域,不具有变量提升 const 用...

  • ES 6 7 8 随笔 QAQ

    ES6 1. var let const let,const具有块级作用域,不具有变量提升 const 用...

  • js常见知识点--第二篇

    一、var 、let 、const的区别 var是ES5提出的,let和const是ES6提出的。var不存在块级...

  • ES6基础知识

    let const es6 提供了新的声明方式代替以前的 var let construction var不支...

  • es6总结一

    es6基础 let和const命令 let和const用于声明变量let跟var的区别 1、let定义过的变量不能...

网友评论

      本文标题:【ES6 笔记】var、let、const

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