超级厉害的JavaScript —— ECMAScript 6 标准(2) —— let 和 const

let 块作用域变量

用于变量的声明,用法类似var,但是let是代码块作用域。块作用域:指{ }间的代码的作用域

不存在变量提升

在变量声明之前,使用用let声明的变量会抛出ReferenceError

console.log(bar);//抛出ReferenceError
let bar = 2;

暂时性锁区

只要在块级作用域内用let声明的变量就绑定这个区域,这个变量就已经存在在当前作用域,但是是不可获取的,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。

console.log(tmp);//输出undefined
var tmp = 123;
{
    console.log(tmp);//抛出ReferenceError
    let tmp;
}

不允许重复声明

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

{
    let a = 1;
    {
        let a = 2;//可以,父子作用域不是相同作用域
    }
    let a = 3;//不可以
}

const 常量声明

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

性质

  • 常量的值不能改变
  • 只声明不赋值会报错
  • 块作用域常量
  • 不可重复声明
  • 复合类型(对象和数组)只保证常量保存的地址不变

对象冻结

实现对象的完全只读,可以使用Object.freeze(obj)

const foo = Object.freeze({});

注意:Object.freeze本身不会递归冻结对象,即冻结的对象的属性如果还是复合类型,该属性的属性仍然不是只读的


顶层对象的属性

顶层对象在浏览器指的是window对象,在node环境指的是global对象;

ES6规定,var和function声明的全局变量依旧是顶层对象的属性,而let、const和class声明的全局变量不属于顶层对象的属性。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值