var和let的區(qū)別

轉(zhuǎn)載自程序員是粉色的

先說區(qū)別

1.使用var聲明的變量,其作用域為該語句所在的函數(shù)內(nèi),且存在變量提升現(xiàn)象绢片;
2.使用let聲明的變量县忌,其作用域為該語句所在的代碼塊內(nèi),不存在變量提升事示;
3.let不允許在相同作用域內(nèi)礼患,重復(fù)聲明同一個變量是钥。

1.基本語法

{
  let a = 125;
  var b = 521;
}
a // Uncaught ReferenceError: a is not defined
b // 521

上面代碼中掠归,使用let聲明的變量報錯,var聲明的返回正確的值悄泥,這說明虏冻,let聲明的變量只在它所在的代碼塊有效。

let配合for循環(huán)的應(yīng)用

for (let i = 0; i < 5; i++) {
  console.log(i); //0 1 2 3 4 
}

console.log(i); //ReferenceError: i is not defined

上面代碼中弹囚,計數(shù)器i只在for循壞體內(nèi)有效厨相,再循環(huán)體外引用就會報錯。

下面是常見的面試題目:

for (var i = 0; i <10; i++) {  
    setTimeout(function() {  // 同步注冊回調(diào)函數(shù)到 異步的 宏任務(wù)隊列余寥。
         console.log(i);        // 執(zhí)行此代碼時领铐,同步代碼for循環(huán)已經(jīng)執(zhí)行完成
      }, 0);
}
 // 輸出結(jié)果
//10   共10個 

如果把 var改成 let聲明:

// i雖然在全局作用域聲明悯森,但是在for循環(huán)體局部作用域中使用的時候宋舷,變量會被固定,不受外界干擾瓢姻。
for (let i = 0; i < 10; i++) { 
  setTimeout(function() {
    console.log(i);    //  i 是循環(huán)體內(nèi)局部作用域祝蝠,不受外界影響。
  }, 0);
}
// 輸出結(jié)果:
0  1  2  3  4  5  6  7  8 9

另外幻碱,for循環(huán)還有一個特別之處绎狭,就是設(shè)置循環(huán)變量的那部分是一個父作用域,而循環(huán)體內(nèi)部是一個單獨的子作用域褥傍。

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

上面代碼正確運行儡嘶,輸出了 3 次abc。這表明函數(shù)內(nèi)部的變量i與循環(huán)變量i不在同一個作用域恍风,有各自單獨的作用域蹦狂。

2.不存在變量提升

var命令會發(fā)生”變量提升“現(xiàn)象,即變量可以在聲明之前使用朋贬,值為undefined凯楔。

let命令則不同,它所聲明的變量一定要在聲明后使用锦募,否則報錯摆屯。

// var 的情況
console.log(ar); // 輸出undefined
var ar = 512;

// let 的情況
console.log(et); // 報錯ReferenceError
let et = 512;

上面代碼變量ar用var聲明,會發(fā)生變量提升糠亩,因沒有值虐骑,所以會輸出undefined。變量et用let聲明的則不會發(fā)生變量提升赎线。

暫時性死區(qū)

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

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

ES6 明確規(guī)定盏缤,如果區(qū)塊中存在let和const命令砰蠢,這個區(qū)塊對這些命令聲明的變量,從一開始就形成了封閉作用域唉铜。凡是在聲明之前就使用這些變量台舱,就會報錯。(使用const聲明的是常量潭流,在后面出現(xiàn)的代碼中不能再修改該常量的值竞惋。)

總之,在代碼塊內(nèi)灰嫉,使用let命令聲明變量之前拆宛,該變量都是不可用的。這在語法上讼撒,稱為“暫時性死區(qū)”(temporal dead zone浑厚,簡稱 TDZ)。

不允許重復(fù)聲明

let不允許在相同作用域內(nèi)根盒,重復(fù)聲明同一個變量钳幅。

// 報錯
function func() {
  let a = 10;
  var a = 1;
}

// 報錯
function func() {
  let a = 10;
  let a = 1;
}

因此,不能在函數(shù)內(nèi)部重新聲明參數(shù)炎滞。

function func(arg) {
  let arg; // 報錯
}

function func(arg) {
  {
    let arg; // 不報錯
  }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末扳埂,一起剝皮案震驚了整個濱河市巩割,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖缰揪,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扭倾,死亡現(xiàn)場離奇詭異匹耕,居然都是意外死亡烛缔,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門柜砾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來湃望,“玉大人,你說我怎么就攤上這事痰驱≈ぐ牛” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵担映,是天一觀的道長废士。 經(jīng)常有香客問我,道長蝇完,這世上最難降的妖魔是什么官硝? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任矗蕊,我火速辦了婚禮,結(jié)果婚禮上氢架,老公的妹妹穿的比我還像新娘傻咖。我一直安慰自己,他們只是感情好岖研,可當(dāng)我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布卿操。 她就那樣靜靜地躺著,像睡著了一般孙援。 火紅的嫁衣襯著肌膚如雪害淤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天拓售,我揣著相機與錄音窥摄,去河邊找鬼。 笑死邻辉,一個胖子當(dāng)著我的面吹牛溪王,可吹牛的內(nèi)容都是我干的腮鞍。 我是一名探鬼主播值骇,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼移国!你這毒婦竟也來了吱瘩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤迹缀,失蹤者是張志新(化名)和其女友劉穎使碾,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體祝懂,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡票摇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了砚蓬。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片矢门。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖灰蛙,靈堂內(nèi)的尸體忽然破棺而出祟剔,到底是詐尸還是另有隱情,我是刑警寧澤摩梧,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布物延,位于F島的核電站,受9級特大地震影響仅父,放射性物質(zhì)發(fā)生泄漏叛薯。R本人自食惡果不足惜浑吟,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望耗溜。 院中可真熱鬧买置,春花似錦、人聲如沸强霎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽城舞。三九已至轩触,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間家夺,已是汗流浹背脱柱。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留拉馋,地道東北人榨为。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像煌茴,于是被迫代替她去往敵國和親随闺。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,901評論 2 345