js 中 var let const 的區(qū)別

  1. 很多人認(rèn)為 var 和 let const 的區(qū)別在于,var 會(huì)變量提升,而 let const 不會(huì),雖然可以這樣認(rèn)為,但是我覺(jué)得并不完全對(duì)。
  2. 在 JS 引擎解析代碼的時(shí)候,遇到變量不同的聲明方式過(guò)程是不一樣的。

通過(guò) var 聲明變量的過(guò)程

console.log(a);  // undefined
var a = 1;
console.log(a);  // 1
  • 過(guò)程:
    • var 聲明的變量會(huì)提升到頂部,創(chuàng)建 a 變量。
    • 創(chuàng)建完變量后會(huì)初始化 a,此時(shí)為 undefined。
    • 執(zhí)行代碼,將 a 變量值賦予 a 變量。

這就是 var 變量聲明之前,輸出這個(gè)變量為 undefined 的原因了。


通過(guò) let 聲明變量的過(guò)程

{
    console.log(a);  // index.html:28 Uncaught ReferenceError: Cannot access 'a' before initializationat
    let a = 1;
    console.log(a);
}
let b = 1;
let b = 2;  // Uncaught SyntaxError: Identifier 'a' has already been declared 

第一個(gè)輸出結(jié)果:無(wú)法在初始化之前訪(fǎng)問(wèn) ' a '

  • 那么 let 聲明的變量會(huì)提升嗎?

  • 過(guò)程:

    • let 聲明的變量在創(chuàng)建過(guò)程中被提升。
    • 開(kāi)始執(zhí)行代碼,但未初始化,可以認(rèn)為在變量初始化之前,是無(wú)法使用這個(gè)變量的。
    • 初始化代碼,在修改變量的前提下賦值。

第二個(gè)輸出結(jié)果:未捕獲的語(yǔ)法錯(cuò)誤:已聲明標(biāo)識(shí)符 “a”

  • let 聲明的變量是無(wú)法重復(fù)聲明的。

通過(guò) const 聲明變量的過(guò)程

const a = 1;
console.log(a);  // 1
a = 2;  // Uncaught TypeError: Assignment to constant variable.at

重新賦值了常量變量。也就是重新修改了const聲明的變量的值。

  • const 和 let 只有一個(gè)區(qū)別,就是 const 聲明的變量過(guò)程只有兩步。
  • 創(chuàng)建和初始化,沒(méi)有賦值的過(guò)程。所以無(wú)法給 const 變量進(jìn)行重新賦值。

const 和 let 具有塊級(jí)作用域

{
    var a = 1;
    let b = 2;
    const c = 3;
}
console.log(a);  // 1
console.log(b);  // ReferenceError: b is not defined
console.log(c);  // ReferenceError: c is not defined

我們會(huì)發(fā)現(xiàn),let 和 const 只限于當(dāng)前作用域的,外部作用域時(shí)無(wú)法訪(fǎng)問(wèn)到的,那么兩者聲明的變量是屬于 window 的嗎?

var a = 1;
let b = 2;
const c = 3;
console.log(window.a);  // 1
console.log(window.b);  // undefined
console.log(window.c);  // undefined

看完結(jié)果之后,在全局作用域中 var 和 不使用 var 聲明的變量都是屬于 window 的,而 let const 不是。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容