let & const 命令
原書作者:阮一峰
原書地址:ECMAScript 6入門
- let 用法
- 塊級作用域
- const 用法
- ES6 聲明變量的6中方法
- 頂層對象
1. let用法
- 基本特性
- 用于定義變量(類似于var)
- 作用域為當前代碼塊(不同于var)
{ let a = 10; var b = 1; } a // ReferenceError: a is not defined. b // 1
- 不存在變量提升(不同于var)
- 注:在定義let變量之前,該變量不可用,稱為暫時性死區(qū)(TDZ)
// var 的情況 console.log(foo); // 輸出undefined var foo = 2; // let 的情況 console.log(bar); // 報錯ReferenceError let bar = 2; // TDZ 導致typeof不再是一個永遠不報錯的操作 typeof x; // ReferenceError let x;
- 不允許重復聲明(不同于var)
// 報錯 function func() { let a = 10; var a = 1; } // 報錯 function func() { let a = 10; let a = 1; }
- 合適場景
- for循環(huán)計數(shù)器(設(shè)置循環(huán)信息為父作用域,循環(huán)體為子作用域)
for (let i = 0; i < 3; i++) { let i = 'abc'; console.log(i); } // abc // abc // abc
2. 塊級作用域
- 引入目的
- 防止內(nèi)層變量覆蓋外層變量
- 防止計數(shù)循環(huán)變量泄露為全局變量
- 塊級作用域與函數(shù)聲明
- 允許在塊級作用域聲明函數(shù)
- 函數(shù)聲明類似于var荆陆,即提升到全局作用域或函數(shù)作用域頭部
- 函數(shù)作用域會提升到所在塊級作用域的頭部
3. const用法
- 基本特性
- 用于定義常量
- 作用域為當前代碼塊
- 不存在變量提升
- 不允許重復聲明
- 注
- const特性和let很像禀挫,區(qū)別在于const聲明常量而let聲明變量
- const保證的是所指向變量的內(nèi)存地址不能改變
- 對于對象和數(shù)組內(nèi)部數(shù)據(jù)結(jié)構(gòu)變換無法控制
4. ES6 聲明變量的6中方法
- var
- function
- let
- const
- import
- class
5. 頂層對象
- 對象屬性
- ES6中唆迁,頂層對象屬性不再與全局對象掛鉤(保留var和function不變)
var a = 1; // 如果在 Node 的 REPL 環(huán)境细溅,可以寫成 global.a // 或者采用通用方法推捐,寫成 this.a window.a // 1 let b = 1; window.b // undefined
- 對象本身
- ES5 頂層對象在不同環(huán)境中實現(xiàn)不同
- 瀏覽器卖陵,頂層對象是window遭顶,其他環(huán)境不支持
- 瀏覽器和Web Worker,self也指向頂層對象
- Node中泪蔫,頂層對象是global棒旗,其他環(huán)境不支持
- this可以用于取頂層對象,但
- 全局環(huán)境中撩荣,this返回頂層對象铣揉,Node模塊和ES6模塊,this返回當前模塊
- 函數(shù)里面的餐曹,當函數(shù)不以對象方法運行逛拱,則this返回頂層對象,但是在嚴格模式下會為undefined
- 取頂層對象方法(勉強可用)
// 方法一 (typeof window !== 'undefined' ? window : (typeof process === 'object' && typeof require === 'function' && typeof global === 'object') ? global : this); // 方法二 var getGlobal = function () { if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } if (typeof global !== 'undefined') { return global; } throw new Error('unable to locate global object'); };
- ES5 頂層對象在不同環(huán)境中實現(xiàn)不同