ES6 let 與 const

一.let

ES6 新增了 let 命令,用來聲明變量。它的用法類似于 var,但是所聲明的變量,只在 let 命令所在的代碼塊內(nèi)有效。

1. 變量名不能重復(fù)
  • let 聲明的變量,變量名不能重復(fù)! 而且必須先聲明后使用。
  • 換句話說,let 沒有變量的提升 和 變量的污染。
    var a = 0;
    let a = 1;  // 報(bào)錯(cuò) --- 標(biāo)識(shí)符 'a' 已經(jīng)聲明
    console.log(a);
2. 塊級(jí)作用域
  • 塊級(jí)作用域,相當(dāng)于局部作用域。
  • 在JS中,只有函數(shù)才能創(chuàng)造一個(gè)局部作用域,
  • 但是在ES6中,只要是個(gè) { } 都是塊級(jí)作用域(局部作用域)。
    // 對(duì)象:
     {
         var a = 1;
         let b = 2;
     }
     console.log(a);  // a = 1    
     console.log(b);  // 報(bào)錯(cuò) --- b is not defined
  
    // 在 js 中函數(shù)創(chuàng)造局部環(huán)境 
    for (var i = 0; i < 10; i++) {
        var a = i;
    }
    console.log(i);     // 10
    console.log(a);     // 9

    // es6 中 用 let 在 for 中聲明的變量 ,無法在外部訪問。
    for (let i = 0; i < 10; i++) {
        let a = i;
    }
    console.log(i);     // i is not defined
    console.log(a);     // i is not defined
3. let 聲明的變量只能在當(dāng)前作用域使用
  • js5 中 用 var 在 for 中聲明的變量,可以再外部訪問。
  • es6中 用 let 在 for 中聲明的變量 ,無法在外部訪問。
  • 在 js 中,全局變量可以在局部環(huán)境下使用,局部變量不能在全局下使用。
  • 在 es6 中,let 聲明的變量,全局變量只能在全局使用,局部變量只能在局部使用。
    而且全局聲明的變量與局部聲明的變量沒有任何關(guān)系, 變量名都可以一樣。
    let a = 0;  // 全局作用域
    {
        // console.log(a);   // 報(bào)錯(cuò) --- 在初始化之前無法訪問'a'  應(yīng)該先聲明后使用。
        let a = 1;           // 局部作用域
        console.log(a);      //  1
        {
            let a = 2;        // 局部作用域
            console.log(a);   // 2
        }
    }
    console.log(a);  // 0
4. 暫時(shí)性死區(qū)
  • 如果區(qū)塊中存在 let 和 const 命令,這個(gè)區(qū)塊對(duì)這些命令聲明的變量,從一開始就形成了封閉作用域。凡是在聲明之前就使用這些變量,就會(huì)報(bào)錯(cuò)。
  • 總之,在代碼塊內(nèi),使用 let 命令聲明變量之前,該變量都是不可用的。這在語法上,稱為“暫時(shí)性死區(qū)”
    {
        console.log(a);   // 報(bào)錯(cuò) --- 在初始化之前無法訪問'a'     應(yīng)該先聲明后使用。
        let a = 1;        // 局部作用域
        console.log(a);   // 1
    }

二. const

1.const關(guān)鍵字
  • 在ES6中用來聲明靜態(tài)常量。
  • 常量在聲明時(shí),所有字母必須大寫, 必須賦值。
  • 一旦聲明,常量的值就不能改變。
    const PI = 3.1415926;
    console.log(PI);
    PI = 0; 
    console.log(PI);    // 報(bào)錯(cuò) --- 常量無法修改,  對(duì)常數(shù)變量的賦值。
    const ABC;
    console.log(ABC);   // 報(bào)錯(cuò) --- 在const聲明中缺少初始化格       
2. const 在作用域特性上與 let 完全一致

三. 總結(jié):

1. const 的作用域與 let 命令相同:只在聲明所在的塊級(jí)作用域內(nèi)有效。
2. const 與 let 都 沒有提升和污染(變量 / 常量)。
3. const 與 let 都 存在暫時(shí)性死區(qū)。
4. const 與 let 都 只能在聲明的位置后面使用。
5. const 與 let 都 不可重復(fù)聲明。

區(qū)別:
let => 變量:值可以改變。
const => 常量: 一旦聲明,變量值不可更改。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 為了使JavaScript語言可以用來編寫復(fù)雜的大型應(yīng)用程序,成為企業(yè)級(jí)開發(fā)語言,ECMAScript 6.0(簡...
    長安曹公子閱讀 520評(píng)論 0 2
  • let 和 const 命令 let 命令 塊級(jí)作用域 const 命令 頂層對(duì)象的屬性 gl...
    安小明閱讀 1,036評(píng)論 0 0
  • 1.變量的聲明 ES6 新增了 let 命令,用來聲明變量。它的用法類似于 var,但是所聲明的變量,只在 let...
    達(dá)布干m閱讀 184評(píng)論 0 1
  • ES2015(ES6) 新增加了兩個(gè)重要的 JavaScript 關(guān)鍵字: let 和 const。let 聲明的...
    遼A丶孫悟空閱讀 323評(píng)論 2 8
  • JavaScript共包含三個(gè)部分:ECMAScript、DOM和BOM,而我們今天開始所要講的ES6的全稱就是E...
    前端王睿閱讀 951評(píng)論 5 19

友情鏈接更多精彩內(nèi)容