ECMAScript 6 --- var | let | const

ECMAScript 6 入门

var、let、const 命令

这三个关键字都是用来声明变量的,var是ES5里的语法规范,已经淘汰了;而在ES6的新语法规则中,新增了let和const两个命令,在目前开发中,会优先使用const,他声明的是常量,声明后的值不被允许更改,语义化会更好,像在react中,声明变量基本用const;let关键字在基本数据类型的值和引用数据类型的地址发生变化的时候使用,例如变量的加减乘除等。

在ES6中,声明变量有六种方法:

  • var命令、function命令
  • let 和 const 命令
  • import命令和class命令

let

ES6 新增了let命令,用来声明变量。用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。

  • 测试代码1:

    {
      let a = 1;
    }
    console.log('a:', a);
    
  • 执行结果:
    在这里插入图片描述

  • 测试代码2:

    {
      var b = 2;
    }
    console.log('b:', b);
    
  • 执行结果:
    在这里插入图片描述

从上面测试中,我们使用了let和var声明变量,然后分别在代码块之外调用这两个变量,结果let声明的变量报错,var声明的变量返回了正确的值。这表明,let声明的变量只在它所在的代码块有效。


const

const声明一个只读的常量。一旦声明,常量的值就不能改变。

const a = 1;
  a += 1;
console.log('a:', a);

执行结果:
在这里插入图片描述

以上代码报错原因是对const声明的变量进行了修改,解决方法是将const改成let;

案例

例:下面可以把let改为const吗?
let arr = ['red','yellow','blue']
arr.push('green')

let peson = {
	uname:'kalyn',
	age:100
}
person.address = '中国'

答案是可以的。const声明的值是不能更改的,基本数据类型发生变化不能用const,但对于复杂(引用)数据类型来说,const声明的变量里面存储的不是值,而是地址;只有当引用数据类型的地址发生变化才会修改值,这时候使用const就会报错;

在这里插入图片描述


var、let、const的区别?

  • var是ES5提出的,let和const是ES6提出的;
  • let和const具有块级作用域,而var不存在块级作用域;
  • var存在变量提升,let和const则不存在;
  • let和const存在暂时性死驱,不允许重复声明变量;
  • const声明过的变量不能被修改;

名词解释

暂时性死驱:在一个块级作用域里,如果是用let关键字声明变量的话,这个变量就会绑定这个区域,只在这个作用域里有效,如果在这个区域之外使用的话,属于未声明先赋值,就会报错。

变量提升:var存在变量提升,也就是变量可以在声明之前使用,有返回值,返回值是undefined,但是这种逻辑不合理,正常的逻辑变量应该是在声明以后才能使用;所以,为了解决这一问题,ES6使用let、const改变了语法行为,let和const都不存在变量提升,即在声明变量之前,是找不到这个变量的值的,如果使用,就会报错。

不允许重复声明:let不允许在相同作用域内,重复声明同一个变量。

const不能修改值:let、var声明的是一个变量,声明后的值可以改变,而const声明一个只读的常量。一旦声明,常量的值(变量指向的那个内存地址所保存的数据不得改动)就不能改变。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值