天天看點

ES6中的let、const指令

let隻在目前聲明區域有效

{
  let a = 10;
  var b = 1;
}
a // ReferenceError: a is not defined.
b // 1
           

a是局部變量,b是全局變量,a在外不生效

不存在變量提升

// var 的情況
console.log(foo); // 輸出undefined
var foo = 2;

// let 的情況
console.log(bar); // 報錯ReferenceError
let bar = 2;
           

var聲明的變量會有變量提升的效果,即使未指派還是會聲明,let沒有,在聲明之前讀取就會報錯

暫時性死區

var tmp = 123;

if (true) {
  tmp = 'abc'; // ReferenceError
  let tmp;
}
           

如果在聲明之前給變量指派或者在之前檢視變量的類型都會報錯

不允許重複聲明

function func(arg) {
  let arg;
}
func() // 報錯

function func(arg) {
  {
    let arg;
  }
}
func() // 不報錯
           

上圖,函數參數已經聲明"arg"的變量,函數裡再次聲明就會報錯

有塊級作用域

{{{{
  let insane = 'Hello World';
  {let insane = 'Hello World'}
}}}};
           

這樣每個層級都會有一個作用域,并且互不影響,很友善我們定義各種變量

const

一般用來定義常量,定義後,常量的值不可改變,改變就會報錯~是以一旦聲明常量就得指派,不然就會報錯…

其他用法就和let是差不多的

PS:參考阮老師的書做出的整理