ES6 新增了let
命令,用來聲明變量。它的用法相似於var
,可是所聲明的變量,只在let
命令所在的代碼塊內有效。javascript
{ let a = 10; var b = 1; } a // ReferenceError: a is not defined. b // 1
var
命令會發生」變量提高「現象,即變量能夠在聲明以前使用,值爲undefined
。這種現象多多少少是有些奇怪的,按照通常的邏輯,變量應該在聲明語句以後才能夠使用。java
爲了糾正這種現象,let
命令改變了語法行爲,它所聲明的變量必定要在聲明後使用,不然報錯。函數
// var 的狀況 console.log(foo); // 輸出undefined var foo = 2; // let 的狀況 console.log(bar); // 報錯ReferenceError let bar = 2;
let
不容許在相同做用域內,重複聲明同一個變量。spa
// 報錯 function func() { let a = 10; var a = 1; } // 報錯 function func() { let a = 10; let a = 1; }
所以,不能在函數內部從新聲明參數。code
function func(arg) { let arg; // 報錯 } function func(arg) { { let arg; // 不報錯 } }