一 const
1. 定义常量
1.1 引入模块时
const test = require('http')
1.2 定义时必须赋值(初始化)且不可修改
const a;
// Uncaught SyntaxError: Missing initializer in const declaration
- 若赋值为原始值,不可修改
- 若赋值为引用值,对于的地址不可修改,但指向空间的内容是可变的
const a = {};
a.num = 10;
// 转义后
"use strict";var a = {};
a.num = 10;
Object.freeze(obj) 可以让obj对象/数组冻结,不被修改
const obj = {}
function myFreeze(obj) {if (obj && typeof obj === 'object') {// 要排除nullObject.freeze(obj)for (let k in obj) {myFreeze(obj[k])}}
}
myFreeze(obj)
obj.n1 = 10;
obj.n2 = {test: 1
};
obj.n2 = {test: 2
};
console.log(obj) // {}
const http = require('http')
// 从源头解决:require返回的是实例化的对象,无论怎么修改http,都不影响构造器
1.3 暂时性死区
1.4 有块级作用域
1.5 不能提升
1.6 不能重复声明
二 顶层对象window
- 不用关键字声明的变量将挂载到window上
- 用let/const声明的变量,不属于顶层变量,解决了以上es5不合理的现象