ES6 中的 let 和 const

以前我們在定義變量時用的是 var ,而es6 又給我們提供了兩種方法 let 和 const (const 是定義常量的)。今天我就來總結一下let 和const 。比較簡單,大神麼鳥我。

一、let 定義變量。

我們使用let定義的變量和 es5 中 var 定義的變量具有一下區別。

1. let定義的變量具塊兒級有作用域
什麼是塊兒級作用域,就像 {} 花括號內的,爲塊兒級作用域。所以let 在塊級作用域內聲明後,塊兒級作用域外面是訪問不到的。

function a(){
    let b = 10;
    console.log(b)  //10  可以方問
}
a();
console.log(b);  //報錯  Uncaught ReferenceError: b is not defined

而如果我們將上面的 let 改爲 var聲明變量是不會出現報錯的。這個let 聲明的變量很好的解決了我們以前的閉包問題。 閉包問題不懂的可以看看我以前文章http://blog.csdn.net/webxiaoma/article/details/53213113
我們如果用var 聲明變量會產生以下情況

 function a(){
    var b = 10;
    function c(){
        b++;
        console.log(b)
    }

    return c;
 }
 d = a();
 d(); // 11
 d(); // 12

這是應爲 當變量d 引用 函數c時 形成了閉包。變量b 在被引用後不會立即回收,而是存儲起來了。所以每次執行d(); b變量都會累計加一,有時候我們需要改變這種情況,以前我們會這麼做。

function a(){
    var b = 10;
   (function c(){
        b++;
        console.log(b)
    })()
}

a(); // 11
a(); // 11

其實現在我們完全可以用es6的let去這麼寫

function a(){
    let b = 10;  // 只需要將我們第一次的代碼的 var 改爲 let即可。
    function c(){
        b++;
        console.log(b)
    }

    return c;
 }
 d = a();
 d(); // 11
 d(); // 11

2. let定義的變量不會被提升。

let 聲明的變量是不會被提升的。例如在es5中我們這樣做。

console.log(a) //結果 underfind
var a = 5;

瀏覽器並不會報錯而是 underfind,這是因爲變量a 被提升了,不知道變量提升 原則的可以看看我以前的文章:http://blog.csdn.net/webxiaoma/article/details/52431203

而我們用let聲明的變量 這樣寫瀏覽器會直接報錯

   console.log(a) //Uncaught ReferenceError: a is not defined
   let a = 5;

3. let定義的變量不能夠被覆蓋,但是值可以被修改。

let聲明的變量不可以被修改,例如:

   let a = 5;
   let a =6;
   console.log(a) //報錯 'a' has already been declared

而如果是用var 去聲明的變量,會直接覆蓋掉a以前的值。雖然let聲明的變量不可以被修改,但是我們可以更改它的值
例如:

let a = 5;
a =6;
console.log(a) // 結果 6;

一、const 定義常量。

1.什麼是常量,常量在es6 中是不能被修改的。

const聲明的常量 同樣具有let
的上述三個特點。唯一不同的是,let聲明的變量,變量指針是不能被修改的,但是指針所指的地址的值是可以被修改的,而const聲明的常量,是都不可以被修改的,否則瀏覽器會錯。

 const a = 5;
 a =6;
 console.log(a) //報錯 Assignment to constant variable.

上邊代碼運行會報錯,而let和var聲明的變量是不會報錯的。

es6的這些寫法,對我個人來說感覺還是挺好的,方便,對我們寫代碼也去起到一定的規範作用。

發佈了79 篇原創文章 · 獲贊 97 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章