成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

ES6筆記之 let && const

aristark / 854人閱讀

摘要:聲明的變量只在其所在的代碼塊內(nèi)有效。只要在聲明之前使用這些變量,就會報錯。在語法上稱為暫時性死區(qū)有時候,會不經(jīng)間遇到比較隱蔽的死區(qū),不太容易被發(fā)現(xiàn)。不允許重復聲明不允許在相同的作用域內(nèi)聲明同一個變量。一旦聲明,其值就不能再改變。

let && const let let聲明的變量只在其所在的代碼塊內(nèi)有效。
{
    let a = 10;
}
console.log(a)   //ReferenceError:a is not defined
let聲明變量不存在變量提升

let不像var那樣會發(fā)生“變量提升”現(xiàn)象,所以,變量一定要在聲明后使用,不然就會報錯。

console.log(a)   //ReferenceError:a is not defined
let a = 10;
暫時性死區(qū)

只要塊級作用域內(nèi)存在let關鍵字,它所聲明的變量就綁定這個區(qū)域,不再受外部影響。

var tmp = 20;
if(true){
    tmp = "abc";    //ReferenceError:tmp is not defined
    let tmp;
}

上面的代碼中存在全局變量tmp,但是塊級作用域內(nèi)let又聲明了一個局部變量tmp,導致后者綁定了這個塊級作用域,所以在let聲明變量前,對tmp賦值會報錯。

ES6明確規(guī)定,如果區(qū)塊中存在let和const命令,則這個區(qū)塊對這些命令聲明的變量從一開始就形成封閉作用域。只要在聲明之前使用這些變量,就會報錯。在語法上稱為“暫時性死區(qū)(temporal dead zone,TDZ)”

有時候,會不經(jīng)間遇到比較隱蔽的“死區(qū)”,不太容易被發(fā)現(xiàn)。

function bar(x=y,y=2){
    return [x,y];
}
bar() //報錯

上面的代碼中是因為參數(shù)x的默認值等于另一個參數(shù)y,而此時y還沒有聲明,屬于死區(qū)。

不允許重復聲明

let不允許在相同的作用域內(nèi)聲明同一個變量。

function bar(){
    let a = 10;
    var a = 20; 
}
//報錯

function bat(){
    let a = 10;
    let a = 20;
}
//報錯

因此,所以也不能在函數(shù)內(nèi)重復聲明參數(shù):

function bar(args){
    let args = 10;  
}
bar() //報錯

function bar(args){
    {
        let args = 20;
    }
}
bar()  //不報錯
塊級作用域
使用let和const可以實現(xiàn)塊級作用域

外層代碼塊不受內(nèi)層代碼塊的影響。

外層作用域無法讀取內(nèi)層作用域的變量。

內(nèi)層作用域可以定義外層作用域的同名變量。

塊級作用域的實現(xiàn),使得廣泛使用的自執(zhí)行匿名函數(shù)(IIFE)變得不再必要了。

//自執(zhí)行模式
(function(){
    var a = 10;
})()


//塊級作用域?qū)懛?function(){
    let a = 10;
}

函數(shù)本身的作用域也在其所在的塊級作用域之內(nèi)。

const

const用來聲明常量。一旦聲明,其值就不能再改變。

const PI = 3.1415;
const PI = 3  //TypeErrorL "PI" is read-only

const聲明的變量不得改變值,意味著const一旦聲明常量就必須立即初始化,不能留到后面賦值。

const與let關鍵字一樣,只在聲明所在的塊級作用域內(nèi)有效;const關鍵字聲明的常量也不提升,同樣存在暫時性死區(qū),只能在聲明后使用。

對于復合型數(shù)據(jù)類型,常量名不指向數(shù)據(jù),而是指向數(shù)據(jù)所在的地址。const關鍵字只是保證常量名指向的地址不變,并不保證該地址的數(shù)據(jù)不變,所以將一個對象聲明為常量必須注意該點。

文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/78624.html

相關文章

  • 【資源集合】 ES6 元編程(Proxy & Reflect & Symbol)

    摘要:理解元編程和是屬于元編程范疇的,能介入的對象底層操作進行的過程中,并加以影響。元編程中的元的概念可以理解為程序本身。中,便是兩個可以用來進行元編程的特性。在之后,標準引入了,從而提供比較完善的元編程能力。 導讀 幾年前 ES6 剛出來的時候接觸過 元編程(Metaprogramming)的概念,不過當時還沒有深究。今天在應用和學習中不斷接觸到這概念,比如 mobx 5 中就用到了 Pr...

    aikin 評論0 收藏0
  • ES6Proxy & Reflection API

    摘要:的出現(xiàn),使用內(nèi)建對象的繼承得以實現(xiàn)。屬性不存在拋出異常是取值操作,而就是賦值操作,可以對屬性值進行驗證。屬性必須為數(shù)字拋出異常接受兩個參數(shù)被讀取屬性的原對象,即代理的目標。這個可以攔截內(nèi)部方法,通過返回數(shù)組的值可以覆寫其行為。 Proxy & Reflect extends的出現(xiàn),使用內(nèi)建對象的繼承得以實現(xiàn)。Proxy可以攔截JS引擎內(nèi)部目標的底層對象操作,這些底層操作被攔截后會觸發(fā)響...

    yearsj 評論0 收藏0
  • 解析ES6變量賦值和基本數(shù)據(jù)類型

      let和const  let和const兩者并不存在變量提升  這里要說明的是變量一定要在聲明后使用,否則報錯。  vara=[];   for(vari=0;i<10;i++){   a[i]=function(){   console.log(i);   };   }   a[6]();//10  變量i是var聲明的,我們要知道這里在全局范圍內(nèi)都有效。我們要知道在每一次循環(huán)中,新的...

    3403771864 評論0 收藏0
  • ES6&amp;ES7中的異步async函數(shù)

    摘要:更好的語義和分別表示異步和等待,比起和更容易理解。前邊聲明關鍵字,表示內(nèi)部有內(nèi)部操作,調(diào)用函數(shù)會返回一個對象。等價于其中函數(shù)就是自動執(zhí)行器。 async函數(shù) 定義 async函數(shù)其實就是之前說過的Generator的語法糖,用于實現(xiàn)異步操作。它是ES2017的新標準。 讀取兩個文件: const fs = require(fs) const readFile = function(f...

    dongxiawu 評論0 收藏0
  • es6必會let &amp;&amp; const

    摘要:副作用,無副作用可執(zhí)行和關鍵詞。和不能像一樣同一個下聲明多次和不會像一樣變量聲明提升原因是,存在因此不能,賦值前使用變量。 showImg(https://segmentfault.com/img/bVbhPlD?w=1271&h=715); 關鍵詞: let ,const, blocking scope ,temporal dead zone,redeclaration,reassi...

    ygyooo 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<