es6中的新的变量与常量以及与传统定义的区别

  es6明确规定,如果区块中存在let和const命令,则这个区块对这些命令声明的变量从一开始就形成封闭作用域。再要在声明之前就使用这些变量,就会报错。

  暂时性死区的本质就是,只要一进入当前作用域,所要使用的变量就已存在,但是不可获取,只有等到声明变量的那一行代码出线,才可以获取和使用该变量。

  let不允许在相同作用域内重复声明同一个变量。let实际上为js新增了块级作用域。es6允许块级作用域任意嵌套。新框架中到处所在的双{}大概用的就是这块功能。块级作用域的出线,实际上使得获得广泛应用的立即执行匿名函数(IIFE)不再必要了。(function(){}());另外,ES6也规定,函数本身的作用域在其所在的块级作用域内。

  对于复合类型的变量,变量名不指向数据,而是指向数据所在的地址。const命令只是保证变量名指向的地址不变,并不保证该地址的数据不变,所以将一个对象声明为常亮必须非常小心。数组可以通过push等方法改变,对象可以通过属性来更改。 如果真的想将对象冻结,应该使用Object.freeze方法。const foo=Object.freeze({});除了将对象本身冻结,对象的属性也应该冻结。遍历对象,类型是对象就冻结。

  const声明的常量只在当前代码块有效。如果想设置跨模块的常量,可以采用import的写法。

  在传统JS中全局对象的属性赋值与全局变量的赋值,是同一件事。这种规定被视为js语言的一大问题,因为很容易不知不觉就创建了全局变量。ES6为了改变这一点,一方面规定,var命令和function命令声明的全局变量依旧是全局对象的属性;另一方面规定,let命令、const命令和class命令声明的全局变量不属于全局对象的属性。

 

转载于:https://www.cnblogs.com/wlxll/p/9255090.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值