ES6——var、let与const

ES6——var、let与const

一、var的声明与变量提升

​ 在es6之前,JavaScript中声明变量都是通过var关键字来声明。但是因为变量声明提升机制总是会造成意想不到的结果,这些都是JavaScript运行机制捣的鬼。js运行机制分为两步,变量提示和逐行解析:

  • 变量提示指的是通过var关键词声明一个变量时,例如:var a = 1; 这时会被分为两步,首先var a = undefined,然后将1赋值给a,就完成了这个赋值操作。咱们看一下下面这个常见面试题,来更清楚的了解一下:在这里插入图片描述

  • 逐行解析 :就是根据代码顺序一行一行往下解析,如果遇到异步任务的话就涉及到事件循环执行机制了,这个我们之后再讲;

二、作用域

作用域分为:全局作用域和局部作用域。根据我的理解来说,作用域就像是一间房子,在这间房子里面定义的变量和函数都可以在这里面使用,不同的房子就代表不同作用域。而a房子里面的变量或者函数在b房子中不能使用和访问,因为他们是只属于a房子的,这就是局部作用域。而我们可以把这些房子结合起来看那就是一栋楼,这就是全局作用域。全局作用域中的变量在局部作用域中可以使用,但是局部作用域定义的变量在全局做作用域中不能访问到,因为这是局部私有的。局部作用域有什么特征呢?他们通常是:函数内部,或者两个”{}“之间内部的数据;

三、let和const块级声明

​ es6新增了两个声明变量的关键词let和const。

  • let:let的用法与var类似,都是声明一个变量,但是通过let声明的变量不会提升。一般会将定义变量放到作用域最顶上,方便下面使用;
  • const:const的用法是声明一个常量,变量值定义后不可再次重新赋值(如果定义时变量是对象的话,可以更改里面的属性值), 声明后必须初始化否则会报错。在这里插入图片描述

四、let和var的区别

  • let声明不会变量提升,var声明会变量提升(if和for语句中定义的变量会变成全局变量);
  • 在全局作用域下,let声明的变量不会绑定到window上,var声明的变量会绑定在window上
  • let有暂时性死区(TDZ,必须先定义后使用),var没有;
  • 在同个作用域下,let不能重复定义同个变量名,var可以重复声明;
  • let是块级作用域,var却是函数作用域;

示例:在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值