1.const實際上保證的坷随,并不是變量的值不得改動首启,而是變量指向的那個內(nèi)存地址不得改動暮屡。對于簡單類型的數(shù)據(jù)(數(shù)值、字符串毅桃、布爾值)褒纲,值就保存在變量指向的那個內(nèi)存地址准夷,因此等同于常量。但對于復(fù)合類型的數(shù)據(jù)(主要是對象和數(shù)組)莺掠,變量指向的內(nèi)存地址衫嵌,保存的只是一個指針,const只能保證這個指針是固定的彻秆,至于它指向的數(shù)據(jù)結(jié)構(gòu)是不是可變的楔绞,就完全不能控制了。
2.ES5 只有兩種聲明變量的方法:var命令和function命令唇兑。ES6 除了添加let和const命令酒朵,后面章節(jié)還會提到,另外兩種聲明變量的方法:import命令和class命令扎附。所以蔫耽,ES6 一共有 6 種聲明變量的方法。
3.頂層對象留夜,在瀏覽器環(huán)境指的是window對象针肥,在 Node 指的是global對象。ES5 之中香伴,頂層對象的屬性與全局變量是等價的。
4.ES6 具则,為了保持兼容性即纲,var命令和function命令聲明的全局變量,依舊是頂層對象的屬性博肋;另一方面規(guī)定低斋,let命令、const命令匪凡、class命令聲明的全局變量膊畴,不屬于頂層對象的屬性。也就是說病游,從 ES6 開始唇跨,全局變量將逐步與頂層對象的屬性脫鉤。
var a=1;// 如果在 Node 的 REPL 環(huán)境衬衬,可以寫成 global.a// 或者采用通用方法买猖,寫成 this.a
window.a // 1
let b=1;
window.b // undefined
5.全局環(huán)境中,this會返回頂層對象滋尉。但是玉控,Node 模塊和 ES6 模塊中,this返回的是當前模塊
6.下面代碼可以保證各種環(huán)境里面狮惜,global對象都是存在的高诺。
// CommonJS 的寫法
require('system.global/shim')();
// ES6 模塊的寫法
import shim from 'system.global/shim';shim();
下面代碼將頂層對象放入變量global
// CommonJS 的寫法
var global = require('system.global')();
// ES6 模塊的寫法
import getGlobal from'system.global';
const global=getGlobal();