不要再在JavaScript中用‘var’聲明變量了

全文共2218字,預計學習時長

7分鐘

不要再在JavaScript中用‘var’聲明變量了


不要再在JavaScript中用‘var’聲明變量了

對`const` 和`let`的介紹


大家都始於初學者。我學到在JavaScript中用關鍵詞var來聲明變量,這是一個簡單且有效的方法,但如今我已做出改變。


若你還在編寫類似var x = 5的代碼,那你需要停下來。說實話,你不必停止,但應該如此。


人們常常將編程語言視作視為一系列金科玉律。但事實上編程語言就像任何一個口頭語言一樣,是不斷變化發展的。


現在我用關鍵詞const和let在JavaScript中聲明所有變量,你也應該這麼做。


讓我們一起學習如何且為什麼要這麼做。


不要再在JavaScript中用‘var’聲明變量了


變量,顧名思義即變化的值。雖然聲明和不接觸變量並沒有什麼問題,但是如果想要編寫具有語義的代碼,則應該區分變量和常量。


常量與變量相反,是聲明的不變值。歷史上,人們用大寫所有的字母來定義一個常數,例如有毒的動物身上的鮮豔顏色。


不用依賴慣例,const關鍵字的引入為人們提供了一個明確的選項,用於聲明哪個值不會更改。


要使用const關鍵字,只需將var替換為const,就無法修改該值了。

<code>// the old way

// var sales_tax = 0.06;
// the new way

const sales_tax = 0.06;
sales_tax = 0.08; // "TypeError: Assignment to constant variable./<code>

實現方式非常簡單,原理也非常簡單。使用const甚至不用動腦,但什麼時候用才合適呢?


諸如稅率或單位之間的轉換的數字比率可作為選擇。另外還會在使用箭頭符號聲明函數時使用const。


<code>const myFunction = (x,y) => {
// Do stuff
}myFunction(1,2)/<code>

這樣函數就不會被覆蓋了。


不要再在JavaScript中用‘var’聲明變量了


不要再在JavaScript中用‘var’聲明變量了

修復JavaScript的異常範圍


JavaScript缺乏範圍清晰性,常導致開發和故障排除的失敗。以下是JavaScript範圍異常的摘要:


· 一個變量可以使用兩次var(重聲明)

· 默認情況下,頂級變量是全局變量(全局對象)

· 循環中的變量重複使用同樣的引用(閉包)


使用let可以澄清和解決許多這些異常。來仔細看看吧。



這很簡單,由let構成的變量是無法重聲明的。


<code>var x = 0;
let y = 0;
var x = 1;

let y = 1; // "SyntaxError: Identifier 'y' has already been declared/<code>

全局對象


由var定義的頂級變量會作為系統屬性被自動添至全局變量,但由let定義的變量就不會。


<code>var x = 0;
let y = 0;
console.log(window.x); // 0
console.log(window.y); // undefined/<code>

提升

由let定義的變量只能在其塊級作用域內訪問,而由var定義的變量會被提升至函數級別。


<code>// Using var
console.log(i); // undefined
for(var i=0; i<4; i++) {
console.log(i);
}
console.log(i); // 4//
Using let
console.log(j); // "ReferenceError: j is not defined
for(let j=0; j<4; j++) {
console.log(j);
}
console.log(j); // "ReferenceError: j is not defined/<code>

閉包


如果閉包對你來說是一個新概念的話,那可能會難以理解,但是閉包是引用自由變量的函數。


當閉包中帶有var時,該引用會被記住,當循環中的變量發生變化時,會造成麻煩。


<code>var functions = [];for (var i = 0; i < 3; i++) {
functions[i] = () => { console.log(i); };
}
for (var j = 0; j < 3; j++) {
functions[j]();
}// 3 3 3/<code>

如果使用let,每次都會創建新的引用。


<code>var functions = [];
for (let i = 0; i < 3; i++) {
functions[i] = () => { console.log(i); };
}
for (var j = 0; j < 3; j++) {
functions[j]();
}// 0 1 2/<code>

說到底,即使不是100%出於這些原因以及它們為何按其工作方式工作,切換到let還將產生更明確的代碼,這些代碼的行為始終如一,並且更易於故障排除和維護。


不要再在JavaScript中用‘var’聲明變量了

告誡


不要再在JavaScript中用‘var’聲明變量了


儘管let和const應該可以有效替換var關鍵字,但是一切並不總是那麼簡單。

由於這些關鍵字是在ECMAScript2015(ES6)中引入的,因此,如果你使用的平臺不允許使用該關鍵字,那就很不幸了。此外,還要確保你的代碼可以在目標受眾群體的瀏覽器中正常運行。

不要再在JavaScript中用‘var’聲明變量了

我們一起分享AI學習與發展的乾貨


分享到:


相關文章: