1.let
1.let只是在代碼塊內(nèi)有效
{
let a =1;
var b =2;
}
a//報(bào)錯(cuò)
b//2
2.for循環(huán)用let比較好,var會(huì)造成外部作用域污染
var a = [];
for (var i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[6](); // 10 把var改成let才能輸出6
3.for循環(huán)的()為{}的父作用域
for (let i = 0; i < 3; i++) {
let i = 'abc';
console.log(i);
}
// abc
// abc
// abc
for (let i = 0; i < 3; i++) {
console.log(i);
}
// 0
// 1
// 2
2.塊級(jí)作用域
1.任意嵌套,內(nèi)層作用域可以定義外層作用域的同名變量
function f1(){let i=1;{let i =2;return i} return i}
f1()
//2
2.避免在塊級(jí)作用域內(nèi)聲明函數(shù)文兢,如果確實(shí)需要晤斩,也應(yīng)該寫成函數(shù)表達(dá)式,而不是函數(shù)聲明語句姆坚。
// 塊級(jí)作用域內(nèi)部澳泵,優(yōu)先使用函數(shù)表達(dá)式
{
let a = 'secret';
let f = function () {
return a;
};
}
3.const
const聲明一個(gè)只讀的常量。一旦聲明旷偿,常量的值就不能改變烹俗。
將一個(gè)對(duì)象聲明為常量必須非常小心
const foo = {};
// 為 foo 添加一個(gè)屬性,可以成功
foo.prop = 123;
foo.prop // 123
// 將 foo 指向另一個(gè)對(duì)象萍程,就會(huì)報(bào)錯(cuò)
foo = {}; // TypeError: "foo" is read-only
4.頂層對(duì)象的屬性
var a = 1;
// 如果在 Node 的 REPL 環(huán)境幢妄,可以寫成 global.a
// 或者采用通用方法,寫成 this.a
window.a // 1
let b = 1;
window.b // undefined