相关文章推荐
强健的围巾  ·  明德百度校园菁英俱乐部组织观看百度世界202 ...·  6 月前    · 
打篮球的香菜  ·  西域胡语文献研究获得新进展——段晴教授及其团 ...·  8 月前    · 
强健的小马驹  ·  衡水中学真的那么可怕吗- 百度·  2 年前    · 
爱搭讪的桔子  ·  考研辅导机构怎么选择?考研机构实力排名最新推 ...·  2 年前    · 
潇洒的斑马  ·  五万字一文读懂汽车车道保持辅助系统LKA - 知乎·  2 年前    · 
小百科  ›  在 JavaScript 中用 var, let, 以及 const 有什麼差別?什麼時候該用哪個? |ExplainThis
var javascript const
耍酷的脸盆
5 月前
logo
ExplainThis
  • 軟體前後端
  • 科技業職涯
  • ChatGPT 與 AI
  • 目錄

    • JavaScript 面試題詳解 — 導覽
  • 基礎、型別

    • JavaScript 有哪些資料型別 (data types)? 該怎麼辨別一個變數的資料型別?
    • 在 JavaScript 當中,==、=== 與 Object.is()的區別
    • JavaScript null、undefined 與 undeclared 的區別?
    • 在 JavaScript 中,Map 與 object 的差別?為什麼有 object 還需要 Map?
    • 請解釋 Set、Map、WeakSet 和 WeakMap 的區別?
    • 在 JavaScript 中 0.1 + 0.2 會是多少?為什麼?如何避免相關問題?
    • 嚴格模式 (use strict) 的用途?有什麼好處?
    • 什麼是 ECMAScript?與 JavaScript 有什麼關係?
    • ES6(ES2015)有什麼新特性?
    • ES2023(ES14)有什麼新特性?
    • 寫程式時該用三元運算子 (ternary operator) 嗎?
    • 10 道 JavaScript 考題,測測你多了解這個古怪的語言
  • 變數、作用域、閉包

    • 在 JavaScript 中用 var, let, 以及 const 有什麼差別?什麼時候該用哪個?
    • Javascript 的作用域 (Scope) 與作用域鏈 (Scope Chain) 是什麼?
    • 什麼是閉包 (Closure)?
    • 什麼是提升 (Hoisting)?
  • 陣列

    • JavaScript 中有哪些陣列 (Array) 的遍歷方法(for loop, for...in, for…of, forEach, map, filter, every, some)
    • JavaScript 中的 sort 傳入 (a,b) => b - a 會是升序還是降序?為什麼呢?
    • 如何用 JavaScript 算出陣列的平均數?
    • 請實踐陣列扁平化 (flatten)
    • 請分享你知道的陣列去除重複 (remove duplicates) 方法
  • 函式

    • 什麼是箭頭函式 (Arrow Function)?跟一般的函式有什麼差別?
    • JavaScript 立即調用函式 IIFE (Immediately Invoked Function Expression) 是什麼?優缺點是什麼?
    • 什麼是高階函式 (Higher order function)?使用高階函式有什麼好處?
  • 物件和原型

    • 最常見的 JavaScript 原型 (prototype) 面試題 :原型 (prototype)、原型鏈 (prototype chain) 、原型繼承 (prototypal inheritance)
    • 解釋 JavaScript 中 this 的值?
    • ES6 中的 class 是什麼?和函式構造函式差別是什麼?
    • JavaScript 中的淺拷貝 (shallow copy) 和深拷貝 (deep copy) 差別是什麼?要如何實踐?
    • 為什麼推薦用 structureClone 在 JavaScript 做深拷貝?
  • 事件循環、Promise、Async/Await

    • 請說明瀏覽器中的事件循環 (Event Loop)
    • Promise 是什麼?有什麼用途?
    • Promise.race 是什麼?如何實踐 Promise.race?
    • Promise.all 是什麼?請實現 Promise.all
    • JavaScript 中的 async/await 是什麼?和 promise 有什麼差別?
    • 最常見的事件循環 (Event Loop) 面試題目彙整
  • TypeScript

    • 2023 Advent of TypeScript 第一到五題詳解
  1. Home
  2. 軟體前後端
  3. 前後端面試詳解
  4. JavaScript

在 JavaScript 中用 var, let, 以及 const 有什麼差別?什麼時候該用哪個?

2023年2月9日

💎 加入 E+ 成長計畫 與超過 750+ 位工程師一同在社群成長,並獲得更多深度的軟體前後端學習資源

「 在 JavaScript 中用 var , let , 以及 const 有什麼差別? 」是在前端、JavaScript 面試中常見的考題。在面試時可以先大方向地列點說出異同之處,然後再針對每一個點進行深入說明。以下是以第一人稱撰寫的參考擬答。

var , let , 以及 const 都是在 JavaScript 用來做變數宣告的保留字,在 JavaScript 早期只有 var ,直到 ES2015 (ES6) 時才加入了 let 與 const 。

他們之間主要有 4 個不同

  1. 在作用域上, var 可以是全域、也可以是以函式作為範圍; let 與 const 則是以區塊作為範圍。
  2. 在宣告上, var 可以被重複宣告,但是 let 與 const 則不行。
  3. 在提升上, var 宣告的變數會自動初始化值為 undefined ,因此在宣告前就使用變數,不會出現錯誤,而會是 undefined ;但是 let 與 const 宣告的變數則不會自動初始化,而是會進到 暫時死區 (TDZ) ,因此在 let 與 const 宣告變數前使用該變數,會出現錯誤。
  4. let 與 const 在絕多數面向都是一樣,兩者的一大區別在於,用 let 宣告的變數可以重新賦值,但是用 const 的不行。

作用域的差別

在作用域上, var 可以是全域、也可以是以函式作為範圍, let 與 const 則是以區塊作為範圍。;當我們在一個文件的最外層使用 var 來宣告變數,這時它的範圍會是全域,因此當我們在 console 當中輸入

var greeting = "hello";

我們可以接著輸入

window.greeting; // "hello"

其結果會是 hello ,但是用 let 與 const 宣告則不會有同樣效果。 而除了全域, var 在某個函式中範圍則是該函式。

var 可以重複宣告

在宣告上, var 可以被重複宣告,但是 let 與 const 則不行。所以當使用 var 時,可以做到以下這樣:

var greeting = "Hello! This ExplainThis :)";
var greeting = "ExplainThis is a website that helps you learn programming!";

let 可以重新賦值,但不能重複宣告,所以會如下面這樣:

// 不行這樣!不然會有 SyntaxError: Identifier 'greeting' has already been declared
let greeting = "Hello! This ExplainThis :)";
let greeting = "ExplainThis is a website that helps you learn programming!";
// 可以這樣 :)
let greeting = "Hello! This ExplainThis :)";
greeting = "ExplainThis is a website that helps you learn programming!";

提升上的差別

在提升上, var 宣告的變數會自動初始化,因此在宣告前就使用變數,不會出現錯誤,而會是 undefined ,例如下面這樣

console.log(greeting); // undefined
var greeting = "hi there";
 
推荐文章
强健的围巾  ·  明德百度校园菁英俱乐部组织观看百度世界2020大会-西安明德理工学院
6 月前
打篮球的香菜  ·  西域胡语文献研究获得新进展——段晴教授及其团队的贡献-国家民委 ...
8 月前
强健的小马驹  ·  衡水中学真的那么可怕吗- 百度
2 年前
爱搭讪的桔子  ·  考研辅导机构怎么选择?考研机构实力排名最新推荐!|基础知识|教学 ...
2 年前
潇洒的斑马  ·  五万字一文读懂汽车车道保持辅助系统LKA - 知乎
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
小百科 - 百科知识指南
© 2024 ~ 沪ICP备11025650号