作用域
考慮到環(huán)境導(dǎo)致的行為差異太大可帽,應(yīng)該避免在塊級(jí)作用域內(nèi)聲明函數(shù)娄涩。如果確實(shí)需要,也應(yīng)該寫(xiě)成函數(shù)表達(dá)式映跟,而不是函數(shù)聲明語(yǔ)句蓄拣。
// 塊級(jí)作用域內(nèi)部的函數(shù)聲明語(yǔ)句兜粘,建議不要使用
{
let a = 'secret';
function f() {
return a;
}
}
// 塊級(jí)作用域內(nèi)部,優(yōu)先使用函數(shù)表達(dá)式
{
let a = 'secret';
let f = function () {
return a;
};
}
const
const實(shí)際上保證的弯蚜,并不是變量的值不得改動(dòng),而是變量指向的那個(gè)內(nèi)存地址所保存的數(shù)據(jù)不得改動(dòng)剃法。對(duì)于簡(jiǎn)單類型的數(shù)據(jù)(數(shù)值碎捺、字符串、布爾值)贷洲,值就保存在變量指向的那個(gè)內(nèi)存地址收厨,因此等同于常量。但對(duì)于復(fù)合類型的數(shù)據(jù)(主要是對(duì)象和數(shù)組)优构,變量指向的內(nèi)存地址诵叁,保存的只是一個(gè)指向?qū)嶋H數(shù)據(jù)的指針,const只能保證這個(gè)指針是固定的(即總是指向另一個(gè)固定的地址)钦椭,至于它指向的數(shù)據(jù)結(jié)構(gòu)是不是可變的拧额,就完全不能控制了。因此彪腔,將一個(gè)對(duì)象聲明為常量必須非常小心侥锦。
數(shù)組的解構(gòu)賦值
let a = 1;
let b = 2;
let c = 3;
ES6 允許寫(xiě)成下面這樣。
let [a, b, c] = [1, 2, 3];
let [head, ...tail] = [1, 2, 3, 4];
head // 1
tail // [2, 3, 4]
let [x, y, ...z] = ['a'];
x // "a"
y // undefined
z // []
set結(jié)構(gòu)
let [x, y, z] = new Set(['a', 'b', 'c']);
x // "a"
let [x, y, z] = new Set(['a', 'b', 'c']);
x // "a"
對(duì)象的解構(gòu)賦值
解構(gòu)不僅可以用于數(shù)組德挣,還可以用于對(duì)象恭垦。
let { foo, bar } = { foo: 'aaa', bar: 'bbb' };
foo // "aaa"
bar // "bbb"
對(duì)象的解構(gòu)與數(shù)組有一個(gè)重要的不同。數(shù)組的元素是按次序排列的格嗅,變量的取值由它的位置決定番挺;而對(duì)象的屬性沒(méi)有次序,變量必須與屬性同名屯掖,才能取到正確的值玄柏。
let { bar, foo } = { foo: 'aaa', bar: 'bbb' };
foo // "aaa"
bar // "bbb"
let { baz } = { foo: 'aaa', bar: 'bbb' };
baz // undefined