一 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不合理的現象