ES6 var 與let的區別
阿新 • • 發佈:2018-12-15
var宣告及變數提升機制:
在函式作用域或全域性作用域中通過關鍵字var 宣告的變數,無論實際上在哪裡宣告的,都會被當做在當前作用域頂部宣告的變數
let 不會提升變數
// 正常的宣告一個函式
function getToken(token) {
// 如果token為true
if (token) {
var val = '123456';
return val;
} else {
console.log(val);// 此處訪問為undefind
}
}
getToken();
var的變數的提升 及JS引擎會把上面的getToken函式修改成下面這樣 val變數被提升至最上面 程式碼如下
function getToken(token) {
var val;
// 如果token為true
if (token) {
val = '123456';
return val;
} else {
console.log(val );// 此處列印為undefind
}
}
getToken();
如果使用let 來宣告 變數將不會提升 打印出來的將會報錯 程式碼如下
function getToken(token) {
// 如果token為true
if (token) {
let val = '123456';
return val;
} else {
console.log(val);// 此處報錯為Uncaught ReferenceError: val is not defined
}
}
getToken();
變數將不會提升
還有就是 let 不能重複宣告
比如
var token=10;
let token=20;
// 報錯 Uncaught SyntaxError: Identifier 'token' has already been declared
當然塊級內還是可以的 如下
// 因為是塊級作用 是沒問題的
var val = 10
if (token) {
let val = 20;
}
OK var 與let 的區別 就講解與此 謝謝觀看。