在 es6之前,es5中js只有全域性作用域和函式作用域,作用域是乙個獨立的地盤,讓變數不外洩出去,但是上例中的變數就外洩了出去,所以此時 js 沒有塊級作用域的概念。
全域性作用域就是最外層的作用域,如果我們寫了很多行 js **,變數定義都沒有用函式包括,那麼它們就全部都在全域性作用域中。這樣的壞處就是很容易衝突。
es6 新增了let命令,用來宣告變數。它的用法類似於var,但是所宣告的變數,只在let命令所在的**塊內有效。
const實際上保證的,並不是變數的值不得改動,而是變數指向的那個記憶體位址所儲存的資料不得改動。對於簡單型別的資料(數值、字串、布林值),值就儲存在變數指向的那個記憶體位址,因此等同於常量。但對於復合型別的資料(主要是物件和陣列),變數指向的記憶體位址,儲存的只是乙個指向實際資料的指標,const只能保證這個指標是固定的(即總是指向另乙個固定的位址),至於它指向的資料結構是不是可變的,就完全不能控制了。因此,將乙個物件宣告為常量必須非常小心。
es5 只有全域性作用域和函式作用域,沒有塊級作用域,
es6有了 塊級作用域的概念,塊級作用域即為內的宣告。
es6 規定暫時性死區和let、const語句不出現變數提公升,主要是為了減少執行時錯誤,防止在變數宣告前就使用這個變數,從而導致意料之外的行為。這樣的錯誤在 es5 是很常見的,現在有了這種規定,避免此類錯誤就很容易了。
參考資料:
es6新特性 ES6新特性(一)
var 1 var宣告的是函式作用域 區域性 但在if for等定義的變數是全域性的 2 var 具有變數提公升,預解析 3 在同乙個作用域下,var可以宣告多次 4 var 宣告的變數會掛載到window上 let1 let不存在變數提公升,在變數使用之前,必須要先宣告 2 let在同一作用域下,...
ES6 新特性之Symbol
symbol let s1 symbol foo let s2 symbol bar s1 symbol foo s2 symbol bar s1.tostring symbol foo s2.tostring symbol bar es6 引入了一種新的原始資料型別symbol,表示獨一無二的值。...
es6新特性之Set
set本身是乙個建構函式,可以用來生成set資料結構 1 初始化 set中不允許有重複的值 2 屬性 size 獲取set的長度 3 方法 add 向set中新增任意型別的元素,重複新增無效,返回set本身 delete 向set中刪除元素,返回布林值,表示刪除成功或失敗 has 判斷set中是否存...