[JavaScript] - let & const(ES6)
本篇主要是透過線上課程:udemy
、w3school
及網路上搜尋資源所學習的。
ES6 入門: let & const - JavaScript
ES6 比 ES5 更提升程式品質,可以解決一些 ES5 遇到的問題,但是也會有兼容性的問題。
這邊可以使用Babel來轉換成舊的瀏覽器也可以支援的內容,babel
是一種 js 的 compiler,不過還要搭配一些工具例如Gulp
。不過我個人尚未用到,先把他紀錄下來。
window var 的特性
在 javascript 宣告變數的時候,會盡量避免去污染到全域變數。
1 | var a = 1; |
上面的方式用var a = 1
,會讓 a 變成全域變數,for (var i = 0 ; i < 3 ; i++)
,i 也會變成全域變數(i=3)。這樣容易導致程式間互相污染全域變數
這時候用 let, const 可以解決這種狀況。
let
例子 1:在 function 中用 let 來宣告變數,雖然變數跟外面的全域變數都是 a,但並不會互相影響。
1 | var a = 0; |
例子 2:let 與 for 迴圈的用法
1 | <ul class="list"> |
1 | // 不會污染到全域變數(global) |
const
特性:唯讀,不能被修改。
const 多數用在當這個變數不想被修改,或者是 url 網址等。
例子:
1 | let a = 1; |
但如果const
是用在 object 或是 array 的話是可以更改的。
1 | // object, array還是可以被修改 |
如果想在 const = object or array 仍然不能被修改的話,需要先加上 freeze 的方式。
這邊用 object 來當作範例。
1 | // 如果想要object, array都不能被修改 |
let, const注意事項
用let與const在宣告變數的時候,在哪一行宣告就是建立在哪一行。
如果是用var的話則會提升(hoisting),但是只有提升宣告變數,而不包含賦予值的部分1
2
3
4// 1st a = undefined(不是找不到), 2nd a = 3
console.log(a);
var a = 3;
console.log(a);1
2
3
4
5// // 改用let(const一樣)
// // 1st a = 找不到, 2nd a = 3
console.log(a);
let a = 3;
console.log(a);在相同區塊中,不能二次命名
1
2
3
4
5
6
7var a = 1;
var a = 2;
// let, const 這樣寫會顯示b已經被宣告
let b = 5;
let b = 6;
// Uncaught SyntaxError: Identifier 'b' has already been declaredlet, const不會在全域變數(window)中