ES6定義
ECMA script2015以後的
let 與 const
var的缺陷
- 沒有塊級作用域,導致var在for/if內宣告的變數可以被全域性訪問;(ES6之前的解決辦法使用IIFE-立即執行函式)
- 變數提升,使程式碼不好理解。舉例:
var a = 1;
function show(){
console.log(a);
var a = 2;
}
show(); //結果是a undefined
複製程式碼
let的用法
- let宣告的變數有塊級作用域,只在作用域內有效;
注意:let const 在全域性宣告的變數並不指向window
- let宣告的變數沒有變數提升;在程式碼塊內,let宣告變數之前的區域(TDZ 暫時性死區)使用變數都會報錯, 必須先宣告在使用;
- let在同一個作用域內,不能重複定義變數,可以賦值;
- 對於for(){} 類似的結構來講,()內的程式碼塊可以看作{}程式碼塊的父級;
const的用法
- const塊級作用域和變數提升等方面與let一樣;
- const定義變數時,必須初始化賦值,不可以先宣告後賦值;
- const宣告的常量,不能重複賦值修改;
- 對於物件來說,由於賦值給const常量的是引用,所以可以直接對屬性進行修改,或者通過push的操作修改陣列;
- 如果想建立不能修改的物件可以使用Object.freeze;
const obj1 = Object.freeze(obj);
變數解構賦值
- 在資料交換,如AJAX,JSON資料的處理上非常有用。
let json = { name: murphy, age: 18, job: coder } let {name, age=20, job:j} = json; //'='後面是預設值,':'後面是別名 複製程式碼
- 左右結構格式應該保持一致
- 舉例: 簡化變數值的交換
let a =12; let b = 5; [a,b] = [b,a]; 複製程式碼