1、let聲明的變數,只在let命令所在的代碼塊中有效(類似閉包,是塊級作用域); 2、for迴圈在設置迴圈變數的那部分是一個父作用域,而迴圈體內部是一個單獨的子作用域: 例:for (let i = 0; i < 3; i++) { let i = 'abc'; console.log(i); } ...
1、let聲明的變數,只在let命令所在的代碼塊中有效(類似閉包,是塊級作用域);
2、for
迴圈在設置迴圈變數的那部分是一個父作用域,而迴圈體內部是一個單獨的子作用域:
例:for (let i = 0; i < 3; i++) {
let i = 'abc';
console.log(i);
} // abc // abc // abc 輸出3次abc,表明兩個i不在同一個作用域中;
3、暫時性死區問題;
4、let 不允許重覆聲明,不允許在函數內部重新聲明參數:
function fun(arg){
let arg; // 報錯
}
5、const聲明只讀常亮(必須初始化),作用域與let命令相同;
6、const聲明的變數,存儲的不是變數的值,而是變數的地址:
const foo = {};
foo.prop="name"; //添加一個屬性且複製 可以成功
foo = {}; //相當於重新賦值,報錯 TypeError: "foo" is read-only
數組同理,如果真的想將對象凍結,應該使用Object.freeze
方法
const foo = Object.freeze({});