国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

ES6筆記之 let && const

aristark / 846人閱讀

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

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

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

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

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

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

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

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

有時候,會不經間遇到比較隱蔽的“死區”,不太容易被發現。

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

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

不允許重復聲明

let不允許在相同的作用域內聲明同一個變量。

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

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

因此,所以也不能在函數內重復聲明參數:

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

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

外層代碼塊不受內層代碼塊的影響。

外層作用域無法讀取內層作用域的變量。

內層作用域可以定義外層作用域的同名變量。

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

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


//塊級作用域寫法
function(){
    let a = 10;
}

函數本身的作用域也在其所在的塊級作用域之內。

const

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

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

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

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

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/78624.html

相關文章

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

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

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

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

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

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

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

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

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

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

    ygyooo 評論0 收藏0

發表評論

0條評論

aristark

|高級講師

TA的文章

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