碎片時(shí)間學(xué)編程「293]:JavaScript 中的 var、let 和 const 有什么區(qū)別?

JavaScript 具有三種變量聲明語(yǔ)句:var,let和const. 后兩者是在 ES6 中添加的,var 變量從以前的版本開始就存在。首先要注意的事情之一是const定義常量(即不會(huì)重新分配的值),而var、let 定義變量。然而,var、let行為與兩者不同,并且const以其他各種方式。
范圍
聲明的變量var是函數(shù)作用域的,與用聲明的變量let或const塊作用域的變量相反。
const scopeExample = () => { ?var a = 'var'; ?let b = 'let'; ?console.log(a, b); // 'var', 'let' ?{ ? ?var c = 'var'; ? ?let d = 'let'; ? ?console.log(c, d); // 'var', 'let' ?} ?console.log(c); // 'var' ?console.log(d); // Throws a ReferenceError};
吊裝
當(dāng)用 var 聲明的變量被提升到封閉范圍時(shí),用let或 const 聲明的變量在其定義被評(píng)估之前不會(huì)被初始化。
const hoistingExample = () => { ?console.log(a); // undefined ?var a = 'var'; ?console.log(a); // 'var' ?console.log(b); // ReferenceError ?let b = 'let'; ?console.log(b); // 'let'};
全局對(duì)象屬性
在頂層,用 let 聲明的變量與用 const 或var聲明的變量不同,它在全局對(duì)象上創(chuàng)建一個(gè)屬性。
var a = 'var';let b = 'let';console.log(window.a); // 'var'console.log(window.b); // undefined
重新申報(bào)
在嚴(yán)格模式下,用 with 聲明的變量var可以在同一范圍內(nèi)重新聲明,而用let或聲明的變量則不允許這樣做const。
'use strict';var a = 'var1';var a = 'var2';let b = 'let1';let b = 'let2'; // SyntaxError
更多內(nèi)容請(qǐng)?jiān)L問我的網(wǎng)站:https://www.icoderoad.com