1、letjavascript
1.相似var, 但在let
命令所在的代碼塊內有效。java
2.不存在變量提高。(必須先聲明才能使用不然報錯)es6
3.暫時性死區。(只要塊級做用域內存在let
命令,它所聲明的變量就「綁定」(binding)這個區域,再也不受外部的影響。防止變量泄露)瀏覽器
4.不容許重複聲明。函數
2、塊級做用域與函數聲明this
1.考慮到環境致使的行爲差別太大,應該避免在塊級做用域內聲明函數。若是確實須要,也應該寫成函數表達式,而不是函數聲明語句。spa
// 塊級做用域內部的函數聲明語句,建議不要使用 { let a = 'secret'; function f() { return a; } } // 塊級做用域內部,優先使用函數表達式 { let a = 'secret'; let f = function () { return a; }; }
2.ES6 的塊級做用域必須有大括號code
3、const 命令對象
1.聲明一個只讀的常量。一旦聲明,常量的值就不能改變。ip
2.只在聲明所在的塊級做用域內有效。
3.一樣存在暫時性死區。
5.不可重複聲明。
6.擴展: 可使用 Object.freeze (待補充)方法凍結
4、ES6 聲明變量的六種方法
ES5 只有兩種聲明變量的方法:var
命令和function
命令。ES6 除了添加let
和const
命令,後面章節還會提到,
另外兩種聲明變量的方法:import
命令和class
命令(待補充)。因此,ES6 一共有 6 種聲明變量的方法。
5、頂層對象的屬性
頂層對象,在瀏覽器環境指的是window
對象,在 Node 指的是global
對象。
1.ES5 之中,頂層對象的屬性與全局變量是等價的。
2.ES6var
命令和function
命令聲明的全局變量,依舊是頂層對象的屬性;let
命令、const
命令、class
命令聲明的全局變量,不屬於頂層對象的屬性。
var a = 1; // 若是在 Node 的 REPL 環境,能夠寫成 global.a // 或者採用通用方法,寫成 this.a window.a // 1 let b = 1; window.b // undefined