關(guān)鍵字 let 和 const

開始學習ES6,這里是第一篇筆記鳖轰,首先記錄了2個基礎(chǔ)的letconst關(guān)鍵字。

let

let 關(guān)鍵字帶來了塊級作用域扶镀。

es6之前蕴侣,我們只有全局作用域和函數(shù)作用域,而let的出現(xiàn)宣示著塊級作用域的到來臭觉,我覺得這是JavaScript在逐漸變得嚴謹起來昆雀,并向我們?nèi)映隽艘幌盗械摹罢Z法糖”。

// 傳統(tǒng)的 var 關(guān)鍵字
var a = [];
for(var i = 0; i < 6; i++){
  a[i] = function(){
    return i;
   }
}
a[3](); // 6
a[5](); // 6

// ES6 新增的 let 關(guān)鍵字
var b = [];
for(let j = 0; j < 6; j++){
  b[j] = function(){
    return j;
  }
}
b[3](); // 3
b[5](); // 5

let 不存在變量提升

var關(guān)鍵字在聲明變量時蝠筑,會有一種“變量提升”(預(yù)解析)機制(提醒自己一下:function函數(shù)聲明也一樣狞膘,優(yōu)先級要比變量提升要高,函數(shù)表達式等同變量聲明)菱肖。然而客冈,let卻不存在變量提升機制:

function foo(){
    a = 6;
    console.log(a);
    let a;
}
foo(); // Uncaught ReferenceError: a is not defined

暫時性死區(qū)(temporal dead zone,簡稱TDZ)

其實稳强,不止變量提升,letconst聲明的變量有更嚴格的設(shè)置和悦,letconst聲明的變量會綁定所在塊級作用域退疫。假如說,我用letconst聲明了一個變量variable1鸽素,那么在作用域內(nèi)褒繁,在聲明語句前引用該變量都會導(dǎo)致錯誤,即使該變量在外部有聲明或賦值馍忽。

var variable1 = "kawi";
function foo(){
    typeof(variable1);
    let variable1;
}
foo(); // Uncaught ReferenceError: variable1 is not defined

上面例子中代碼與變量提升的非常相似棒坏,但要解釋的東西完全不一樣。


禁止重復(fù)聲明

以往在編寫JavaScript代碼時遭笋,var關(guān)鍵字過于靈活的特性以至于我們可能在某些業(yè)務(wù)場景中不嚴謹?shù)闹貜?fù)定義某個變量坝冕。例如:

for(var i=0; i<3;){
    i++
}
console.log(i); // 3

for(var i=0; i<6;){
    i++
}
console.log(i); // 6

前面已經(jīng)領(lǐng)會過letconst有多講究嚴謹,重復(fù)用它們定義一個變量瓦呼,是會導(dǎo)致錯誤的:

function foo(param){
    let param = 1; // Uncaught SyntaxError: Identifier 'param' has already been declared
}

function foo(){
    let param = 1;
    var param = 2; // Uncaught SyntaxError: Identifier 'param' has already been declared
}

塊級作用域的嵌套

像下面這樣的嵌套是可以的:

{
    let a = 1;
    {
        let a = 2;
        console.log(a); // 2
    }
}

const

const關(guān)鍵字用于定義恒量喂窟,也就是不變的值。

const 是可讀的,不可寫的磨澡。

const a = 1;
a = 2; // Uncaught TypeError: Assignment to constant variable.

const 聲明變量時一定要賦值碗啄。

const a; // Uncaught SyntaxError: Missing initializer in const declaration
a = 2;

const 聲明變量,并賦值引用類型

當我們用const定義一個變量稳摄,并賦值一個引用類型對象稚字,這個對象是可以修改的。例如:

const arr = [];
arr[1] = 1;
console.log(arr.length); // 2

原因厦酬,指針嘛胆描,指針不變就OK啦!

(PS:在ES6中一共有6個關(guān)鍵字:var弃锐,function袄友,letconst霹菊,import剧蚣,class

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市旋廷,隨后出現(xiàn)的幾起案子鸠按,更是在濱河造成了極大的恐慌,老刑警劉巖饶碘,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件目尖,死亡現(xiàn)場離奇詭異,居然都是意外死亡扎运,警方通過查閱死者的電腦和手機瑟曲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來豪治,“玉大人洞拨,你說我怎么就攤上這事「耗猓” “怎么了烦衣?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長掩浙。 經(jīng)常有香客問我花吟,道長,這世上最難降的妖魔是什么厨姚? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任衅澈,我火速辦了婚禮,結(jié)果婚禮上遣蚀,老公的妹妹穿的比我還像新娘矾麻。我一直安慰自己纱耻,他們只是感情好,可當我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布险耀。 她就那樣靜靜地躺著弄喘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪甩牺。 梳的紋絲不亂的頭發(fā)上蘑志,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天,我揣著相機與錄音贬派,去河邊找鬼急但。 笑死,一個胖子當著我的面吹牛搞乏,可吹牛的內(nèi)容都是我干的波桩。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼请敦,長吁一口氣:“原來是場噩夢啊……” “哼镐躲!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起侍筛,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤萤皂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后匣椰,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體裆熙,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年禽笑,在試婚紗的時候發(fā)現(xiàn)自己被綠了入录。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡佳镜,死狀恐怖纷跛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情邀杏,我是刑警寧澤,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布唬血,位于F島的核電站望蜡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏拷恨。R本人自食惡果不足惜脖律,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望腕侄。 院中可真熱鬧小泉,春花似錦芦疏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至兢交,卻和暖如春薪捍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背配喳。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工酪穿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人晴裹。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓被济,卻偏偏與公主長得像,于是被迫代替她去往敵國和親涧团。 傳聞我的和親對象是個殘疾皇子只磷,可洞房花燭夜當晚...
    茶點故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內(nèi)容

  • let 命令 塊級作用域 const 命令 頂層對象的屬性 global 對象 let 命令 基本用法 ES6 新...
    卞卞村長L閱讀 597評論 0 0
  • let 和 const 命令 let 命令 塊級作用域 const 命令 頂層對象的屬性 gl...
    安小明閱讀 981評論 0 0
  • let 命令 塊級作用域 const 命令 頂層對象的屬性 global 對象 let 命令 基本用法 ES6 新...
    嘉奇呦_nice閱讀 1,633評論 0 2
  • let 基本用法 let命令,用來聲明變量少欺。用法類似于var喳瓣,但聲明的變量,只在let命令所在的代碼塊內(nèi)有效赞别。 f...
    oWSQo閱讀 438評論 0 0
  • 1畏陕、let命令 作用域 let命令與var基本相似,只是let所聲明的變量只在let代碼塊內(nèi)有效仿滔。 因為變量使用l...
    彩虹之夢閱讀 639評論 0 2