iT邦幫忙

2023 iThome 鐵人賽

DAY 17
1
Software Development

再騙小心沒朋友🥵 用LIFF實作LINE整人工具系列 第 17

[Day17] 不懂JavaScript 只好等著被整😔 ES6 新變數命名規則

  • 分享至 

  • xImage
  •  

現在被廣為使用的 JavaScript 在 1995 年是一個百家爭鳴的語言,許多廠商 (像是:微軟、NetScape) 為了爭取市場佔有率,而開發出各式各樣獨特的語法、功能,導致有些網頁在不同的瀏覽器上會有不同顯示效果,甚至完全無法顯示。於是在 1997 年出現了 ECMA-262 標準化 JavaScript 的語法,而所謂的 ES6 就是指 ECMAScript 2015,下圖是 JavaScript 的進化史:

ES6 版本介紹

ES5、ES6 都是 JavaScript 的版本,相較 ES5 以前版本的語法,ES6 改變了一些語法讓寫法更精簡,不只新增了非同步專用的 Promise、ES6 Modules、Classes,也出現新的變數型態宣告方式解決變數污染的問題。今天要講的是 ES6 版本中的變數宣告方式有什麼改變~詳細的 ES6 版本教學可以看這個網站。

ES6 新變數宣告方式

在 ES6 前,JavaScript 用 var 來宣告變數,乍看之下 var 本身並沒有什麼問題,但其實隱藏著變數汙染的隱憂。因為用var 會把變數自動宣告為全域變數,所以如果同一份程式文件有兩個用 var宣告的相同名稱變數時就會互相影響雙方的值,就算其中一個變數被包在迴圈或流程控制區塊內也一樣會被汙染。
假設在迴圈內外分別宣告兩個變數 i,兩個變數雖然名稱相同但功能不同:

var i = 1;

for (var i=0; i<5; i++){
	console.log("迴圈執行次數:"+ i);
}
console.log(i);


從上面範例可以看到即使是在迴圈內宣告的i不但是全域變數,其值還會影響本來要印出的i值。所以在 ES6 版本後,增加了 let、const 兩種變數宣告的方法,用新方式宣告的變數只會在大括號{}區域中有效,不會自動變成全域變數。

let 變數宣告

用法和 var 類似,但是不允許重複宣告相同變數,不然會出現 SyntaxError 錯誤。且變數宣告的範圍只受區塊作用域(Block Scope)內影響,使用範例如下:

var i = 1;

for (let i=0; i<5; i++){
	console.log("迴圈執行次數:"+ i);
}
console.log(i);

將迴圈內的var宣告方式改成let,最後印出的 i 值就不會被迴圈內的 i 值影響。

如果兩個 i 的變數宣告方式都改成 let,會出現語法錯誤,因為 let 不允許重複宣告相同名稱的變數:

const 常數宣告

constlet一樣可以用來宣告一個只會在大括號內作用的變數,但是用 const 宣告的變數指向的值不能再被改變,不然會出現 TypeError 錯誤。

for (const i=0; i<5; i++){
	console.log("迴圈執行次數:"+ i);
}


從上面的範例可以看出,第一次 i=0 是成立的,因為用 const 宣告的值只能等於 0 不能被改變。但執行第二次迴圈時 i 值要被加 1,所以出現 TypeError 錯誤讓 i 值維持在 0。


上一篇
[Day16] 不懂JavaScript 只好等著被整😔 例外處理篇
下一篇
[Day18] 不懂JavaScript 只好等著被整😔 箭頭函式篇
系列文
再騙小心沒朋友🥵 用LIFF實作LINE整人工具30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言