let和const變數學習
阿新 • • 發佈:2018-11-07
1,var全域性變數,let塊級變數
var a = []; for (let i = 0;/*var i=0*/ i < 10; i++) { a[i] = function () { console.log(i); }; } a[6](); //6 10
var變數導致全域性範圍內有效,所以全域性只
有一個變數i,最後輸出10而不是6
2,for迴圈有一個特別之處,就是設定迴圈變數的那部分是一個
父作用域,而迴圈體內部是一個單獨的子作用域。
for (let i = 0; i < 3; i++) { let i = 'abc'; console.log(i); } // abc // abc // abc
3,let不存在變數提升:
var存在變數提升現象,var宣告之前呼叫物件輸出undefinedvar存在變數提升現象,var宣告之前呼叫物件輸出undefined
let 則不存在這種現象所以直接報錯。
4,暫時性死區:
只要塊級作用域記憶體在let命令,它所宣告的變數就“繫結”
這個區域,不在受外部的影響var tmp = 123; if (true) { tmp = 'abc'; // ReferenceError let tmp; }
暫時性死區表明typeof不再是一個百分百安全的操作
typeof處於let宣告前是在暫時性死區中會報錯,
當並沒有宣告typeof的變數時反而不報錯,結果為undefined