1. 基本概念spa
var 聲明瞭一個變量,而且能夠同時初始化該變量code
let 聲明一個塊級做用域的本地變量,而且可選的賦予初始值對象
const 聲明建立一個只讀的常量,做用域與let相同,這並不意味着常量指向的值不可變,而是變量標識符的值只能賦予一次blog
注意:在語法中的塊級做用域是指if/else/for/while語句裏2個大括號之間的部分作用域
2. 基本用法it
(1)let 所聲明的變量,只在let命令所在的代碼塊中有效io
1 { 2 let a = 1; 3 var b= 2; 4 } 5 6 a //ReferenceError: a is not defined 7 b // 2
上面的代碼塊中,分別用了let 和var 定義了兩個變量,而後在代碼塊以外分別調用這兩個變量,結果let聲明的變量報錯,var聲明的變量返回了正確的值,這說明:console
let聲明的變量只在它所在的代碼塊中有效。for循環
for循環中很適合用let;同時,還有一個很特別之處,以下面的第二段代碼:循環語句部分是一個父做用域,而循環體內是一個單獨的子做用域,所以輸出了三次‘abc’,這代表:做用域內部的變量i和外部的變量i是分離的。class
for(let i=0;i<3;i++){} console.log(i);//RenferenceError:i is not defined
for(let i=0;i<3;i++){ let i="abc"; console.log(i); } // abc // abc // abc
(2)const聲明一個只讀的常量,一旦聲明,常量的值就不能夠改變,以下代碼,當執行到第三行就會報錯
1 const PI = 3.1415926; 2 console.log(PI); //3.1415926 3 PI = 3; //TypeError: Assignment to constant variable.
同時,const聲明的變量不得改變值,因此一旦聲明變量就必須當即初始化,不能留到之後賦值
const str; // SyntaxError: Missing initializer in const declaration 這表示,對於const來講,只聲明不賦值,就會報錯。
可是如下代碼是不會報錯的,const定義常量值,不可以從新賦值,若是值是一個對象,能夠改變對象裏邊的屬性值
{ const a = {value:1} a.value = 2 console.log(a) // {value:2} const b = [1,2,3] b.push(4) console.log(b) // [1,2,3,4] }