一文彻底了解ES6中的var、let、const基本用法以及暂时性死区和变量提升的区别

         ECMAScript 变量是松散类型的,意思是变量可以用于保存任何类型的数据。每个变量只不过是一个用于保存任意值的命名占位符。有三个关键字可以声明变量:var、let、const。其中 var 在ECMAScript 的所有版本中都可以使用,而 const let 只能在ECMAScript 6 及更高版本中使用。

一、var

        var可以定义单个变量和同时定义多个变量,在定义多个变量时用逗号隔开

       

       在 ECMAScript 中 var 关键字声明的变量可以重复声明,但是赋值操作会覆盖前面已经给变量赋的值。值不仅可以改变,数据类型也可以改变。

        

        var声明的全局变量全局作用域会挂载到 window 对象上,可以使用window. 的形式访问该变量,或者直接使用变量名的方式。在函数体内部的用var声明的变量是局部变量,当省略 var时,当前变量会定义为全局变量,但是当我要得到这个变量的值时,我们需要先执行一下函数

二、let

        let 声明的范围是块作用域,而 var 声明的范围是函数作用域。

         let 不可以重复声明变量,var 可以重复声明变量

        切记同一作用域下 let 和 var 混合重复定义一个变量会报错

        let的全局声明不会成为 window 对象的属性( var 声明的变量则会)

三、const

      const 的行为和 let 基本相同,唯一一个重要的区别就是它在声明变量的同时必须初始化变量

      const 声明的变量不允许修改

      const 也是不可重复声明

      const 声明的作用域也是块

      const 声明限制只适用于它指向变量的引用。换句话说,如果 const 变量引用的是一个对象,那么修改这个对象内部的值不违反 const 的限制。引用未发生改变就行。

     

重点来了:var变量提升和let暂时性死区的区别!!!

        变量提升本质上相当于把声明变量和初始化都提前到当前作用域顶部

       

        var声明的变量会把变量声明放到当前作用域顶部,并且赋值为undefined

        通过 let 声明的变量直到它们的定义被执行时才初始化。在变量初始化前访问该变量会导致 ReferenceError。该变量处在一个自块顶部到初始化处理的“暂存死区”中。(暂时性死区相当于把声明变量提升的当前作用域顶部,并没有初始化操作

        你就记住let声明的变量在真正的声明前是不能进行任何操作的!!!

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值