var、let 與 const 的差異 | JavaScript

阿榮-avatar-img
發佈於前端
更新於 發佈於 閱讀時間約 4 分鐘
主要參考來源:【自學程式】var、let 與 const 到底差在哪?

var 可以被重複宣告,但是 let、const 不行

var 可以重複宣告,不會報錯,缺點是不好維護管理,容易取到錯誤的值,忘記或不知道同樣的變數已經在其他地方使用過,導致程式碼結果不如預期。所以 ES6 之後,新增了 let、const 關鍵字,重複宣告變數會報錯

var price = 30;
var price = 40;

let money = 30;
let money = 40;
// Uncaught SyntaxError: Identifier 'money' has already been declared

const wallet = 30;
const wallet = 40;
// Uncaught SyntaxError: Identifier 'wallet' has already been declared


var、let 可以重新賦值,const 不行

不希望、不行被修改的值使用 const 來宣告。使用 const 宣告的變數被重新賦值時,會報錯 Uncaught TypeError: Assignment to constant variable


變數作用域差異:var 是函式作用域,let、const 是區塊作用域

var 為全域和函式作用域,優先查找函式內有沒有該變數,再往外層/全域查找。

var a = '全域變數';

function showVariable() {
var a = '區域變數';
console.log(a);
}

showVariable(); // 區域變數
console.log(a); // 全域變數

{} (非函式) 內用 var 宣告變數,無法將變數限制在該範圍內,會汙染全域。

var a = '全域變數';

{
var a = '區域變數';
console.log(a); // 區域變數
}

console.log(a); // 區域變數
let、const 為全域和區塊作用域。在函式或區塊內都可以將變數限制在該層範圍中。
let a = '全域變數';

function showVariable() {
let a = '區域變數';
console.log(a);
}

showVariable(); // 區域變數
console.log(a); // 全域變數
let a = '全域變數';

{
let a = '區域變數';
console.log(a); // 區域變數
}

console.log(a); // 全域變數
console.log(window.a); // undefined


三個都會 hoisting,但只有 var 會初始化為 undefined,let、const 不會初始化,而是處於 暫時性死區 TDZ 直到變數被宣告

var 會初始化
console.log(greeting); // undefined
var greeting = "hi there";

let const 在 宣告前,都會是 暫時性死區 (TDZ,Temporal Dead Zone),在宣告前使用會報錯 is not defined
console.log(greeting); 
// Uncaught ReferenceError: greeting is not defined
let greeting = "hi there";


變數是否強制在宣告時指定值var、let 可以不用先指定值,const 宣告時一定要指定值

因為 const 不能重新賦值,沒賦值會報錯 Uncaught SyntaxError: Missing initializer in const declaration



資料來源

留言
avatar-img
留言分享你的想法!
avatar-img
阿榮 | 前端 ~ 互動藝術程式
2會員
39內容數
主要放程式學習筆記,分享 Creative Coding 相關內容、作品
2024/04/19
避免網頁在不同瀏覽器中長不一樣。用 CSS Reset 來「重置」和統一瀏覽器預設樣式。
Thumbnail
2024/04/19
避免網頁在不同瀏覽器中長不一樣。用 CSS Reset 來「重置」和統一瀏覽器預設樣式。
Thumbnail
2024/04/12
針對 JavaScript 中的原始型別和隱性轉型進行了詳細的探討
Thumbnail
2024/04/12
針對 JavaScript 中的原始型別和隱性轉型進行了詳細的探討
Thumbnail
2024/04/10
立即(調用)函式 (簡稱 IIFE,Immediately Invoked Function Expression) 是種在定義完可以馬上執行的函式表達式。
Thumbnail
2024/04/10
立即(調用)函式 (簡稱 IIFE,Immediately Invoked Function Expression) 是種在定義完可以馬上執行的函式表達式。
Thumbnail
看更多
你可能也想看
Thumbnail
透過蝦皮分潤計畫,輕鬆賺取零用金!本文分享5-6月實測心得,包含數據流程、實際收入、平臺優點及注意事項,並推薦高分潤商品,教你如何運用空閒時間創造被動收入。
Thumbnail
透過蝦皮分潤計畫,輕鬆賺取零用金!本文分享5-6月實測心得,包含數據流程、實際收入、平臺優點及注意事項,並推薦高分潤商品,教你如何運用空閒時間創造被動收入。
Thumbnail
單身的人有些會養寵物,而我養植物。畢竟寵物離世會傷心,植物沒養好再接再厲就好了~(笑)
Thumbnail
單身的人有些會養寵物,而我養植物。畢竟寵物離世會傷心,植物沒養好再接再厲就好了~(笑)
Thumbnail
不知你有沒有過這種經驗?衛生紙只剩最後一包、洗衣精倒不出來,或電池突然沒電。這次一次補貨,從電池、衛生紙到洗衣精,還順便分享使用心得。更棒的是,搭配蝦皮分潤計畫,愛用品不僅自己用得安心,分享給朋友還能賺回饋。立即使用推薦碼 X5Q344E,輕鬆上手,隨時隨地賺取分潤!
Thumbnail
不知你有沒有過這種經驗?衛生紙只剩最後一包、洗衣精倒不出來,或電池突然沒電。這次一次補貨,從電池、衛生紙到洗衣精,還順便分享使用心得。更棒的是,搭配蝦皮分潤計畫,愛用品不僅自己用得安心,分享給朋友還能賺回饋。立即使用推薦碼 X5Q344E,輕鬆上手,隨時隨地賺取分潤!
Thumbnail
身為一個典型的社畜,上班時間被會議、進度、KPI 塞得滿滿,下班後只想要找一個能夠安靜喘口氣的小角落。對我來說,畫畫就是那個屬於自己的小樹洞。無論是胡亂塗鴉,還是慢慢描繪喜歡的插畫人物,那個專注在筆觸和色彩的過程,就像在幫心靈按摩一樣,讓緊繃的神經慢慢鬆開。
Thumbnail
身為一個典型的社畜,上班時間被會議、進度、KPI 塞得滿滿,下班後只想要找一個能夠安靜喘口氣的小角落。對我來說,畫畫就是那個屬於自己的小樹洞。無論是胡亂塗鴉,還是慢慢描繪喜歡的插畫人物,那個專注在筆觸和色彩的過程,就像在幫心靈按摩一樣,讓緊繃的神經慢慢鬆開。
Thumbnail
在本章節中,我們將學習JavaScript的基本語法,包括如何註解代碼和如何聲明變數。瞭解這些基礎知識對於進一步學習和使用JavaScript來編寫代碼是非常重要的。
Thumbnail
在本章節中,我們將學習JavaScript的基本語法,包括如何註解代碼和如何聲明變數。瞭解這些基礎知識對於進一步學習和使用JavaScript來編寫代碼是非常重要的。
Thumbnail
JavaScript是一種具有動態型別、弱型別、原型繼承等特性的高級腳本語言,應用範圍廣泛,包括前端開發、後端開發、移動應用等。它被各種公司和開源社區廣泛使用。學習JavaScript需要掌握ECMAScript標準、異步編程、模塊系統等知識。
Thumbnail
JavaScript是一種具有動態型別、弱型別、原型繼承等特性的高級腳本語言,應用範圍廣泛,包括前端開發、後端開發、移動應用等。它被各種公司和開源社區廣泛使用。學習JavaScript需要掌握ECMAScript標準、異步編程、模塊系統等知識。
Thumbnail
JavaScript30 傳送門:https://javascript30.com/ 透過 JS 控制 CSS 變數 今天的挑戰是要能透過滑動圖片上面的 <input type="range"> 來改變圖片的三個屬性。 以前在 CSS 裡面看到 var(--xxxx) 這種東西都很
Thumbnail
JavaScript30 傳送門:https://javascript30.com/ 透過 JS 控制 CSS 變數 今天的挑戰是要能透過滑動圖片上面的 <input type="range"> 來改變圖片的三個屬性。 以前在 CSS 裡面看到 var(--xxxx) 這種東西都很
Thumbnail
有招 LET,可以讓你的長算式更清晰好讀!
Thumbnail
有招 LET,可以讓你的長算式更清晰好讀!
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News