摘要:聲明的變量只在其所在的代碼塊內有效。只要在聲明之前使用這些變量,就會報錯。在語法上稱為暫時性死區有時候,會不經間遇到比較隱蔽的死區,不太容易被發現。不允許重復聲明不允許在相同的作用域內聲明同一個變量。一旦聲明,其值就不能再改變。
let && const let let聲明的變量只在其所在的代碼塊內有效。
{ let a = 10; } console.log(a) //ReferenceError:a is not definedlet聲明變量不存在變量提升
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() //不報錯塊級作用域
外層代碼塊不受內層代碼塊的影響。
外層作用域無法讀取內層作用域的變量。
內層作用域可以定義外層作用域的同名變量。
塊級作用域的實現,使得廣泛使用的自執行匿名函數(IIFE)變得不再必要了。
//自執行模式 (function(){ var a = 10; })() //塊級作用域寫法 function(){ let a = 10; }
函數本身的作用域也在其所在的塊級作用域之內。
constconst用來聲明常量。一旦聲明,其值就不能再改變。
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 剛出來的時候接觸過 元編程(Metaprogramming)的概念,不過當時還沒有深究。今天在應用和學習中不斷接觸到這概念,比如 mobx 5 中就用到了 Pr...
摘要:的出現,使用內建對象的繼承得以實現。屬性不存在拋出異常是取值操作,而就是賦值操作,可以對屬性值進行驗證。屬性必須為數字拋出異常接受兩個參數被讀取屬性的原對象,即代理的目標。這個可以攔截內部方法,通過返回數組的值可以覆寫其行為。 Proxy & Reflect extends的出現,使用內建對象的繼承得以實現。Proxy可以攔截JS引擎內部目標的底層對象操作,這些底層操作被攔截后會觸發響...
let和const let和const兩者并不存在變量提升 這里要說明的是變量一定要在聲明后使用,否則報錯。 vara=[]; for(vari=0;i<10;i++){ a[i]=function(){ console.log(i); }; } a[6]();//10 變量i是var聲明的,我們要知道這里在全局范圍內都有效。我們要知道在每一次循環中,新的...
摘要:更好的語義和分別表示異步和等待,比起和更容易理解。前邊聲明關鍵字,表示內部有內部操作,調用函數會返回一個對象。等價于其中函數就是自動執行器。 async函數 定義 async函數其實就是之前說過的Generator的語法糖,用于實現異步操作。它是ES2017的新標準。 讀取兩個文件: const fs = require(fs) const readFile = function(f...
摘要:副作用,無副作用可執行和關鍵詞。和不能像一樣同一個下聲明多次和不會像一樣變量聲明提升原因是,存在因此不能,賦值前使用變量。 showImg(https://segmentfault.com/img/bVbhPlD?w=1271&h=715); 關鍵詞: let ,const, blocking scope ,temporal dead zone,redeclaration,reassi...
閱讀 2620·2021-10-12 10:12
閱讀 778·2019-08-29 17:25
閱讀 2782·2019-08-29 17:24
閱讀 3204·2019-08-29 17:19
閱讀 1792·2019-08-29 15:39
閱讀 3031·2019-08-26 16:50
閱讀 1984·2019-08-26 12:17
閱讀 2694·2019-08-26 12:16