1.定義函數(shù)
2.創(chuàng)建類
3.模塊
4.let與const
5.箭頭函數(shù) arrow functions
6.字符串模板 template string
7.解構(gòu) destructuring
8.for-of循環(huán)(最簡潔熟史、最直接的遍歷數(shù)組元素的語法)
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
es6聲明變量的6種方法:var,function,let,const,import,class
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
1.定義函數(shù)(不需要function也能定義函數(shù))
es6
var human = {
breathe(name) { //不需要function也能定義breathe函數(shù)杭隙。
console.log(name + ' is breathing...');
}
};
human.breathe('jarson'); //輸出 ‘jarson is breathing...’
es5
var human = {
breathe: function(name) {
console.log(name + 'is breathing...');
}
};
human.breathe('jarson');
2.創(chuàng)建類
4.let與const
4.1"暫時性死區(qū)"
"暫時性死區(qū)":在代碼塊內(nèi)狈醉,使用let命令聲明變量之前锅必,該變量都是不可用的亥啦。
只要塊級作用域內(nèi)存在let命令,它所聲明的變量就“綁定”(binding)這個區(qū)域凤价,不再受外部的影響褥蚯。
var tmp = 123;
if (true) {
tmp = 'abc'; // ReferenceError
let tmp;
}
ES6明確規(guī)定,如果區(qū)塊中存在let和const命令妈橄,這個區(qū)塊對這些命令聲明的變量庶近,從一開始就形成了封閉作用域。凡是在聲明之前就使用這些變量眷蚓,就會報錯鼻种。
typeof x; // ReferenceError
let x;
上面代碼中,變量x使用let命令聲明沙热,所以在聲明之前叉钥,都屬于x的“死區(qū)”,只要用到該變量就會報錯篙贸。因此沼侣,typeof運行時就會拋出一個ReferenceError。
作為比較歉秫,如果一個變量根本沒有被聲明蛾洛,使用typeof反而不會報錯。
typeof undeclared_variable // "undefined"
<b>暫時性死區(qū)的本質(zhì)就是</b>雁芙,只要一進(jìn)入當(dāng)前作用域轧膘,所要使用的變量就已經(jīng)存在了,但是不可獲取兔甘,只有等到聲明變量的那一行代碼出現(xiàn)谎碍,才可以獲取和使用該變量。
5.箭頭函數(shù)
當(dāng)我們使用箭頭函數(shù)時洞焙,函數(shù)體內(nèi)的this對象蟆淀,就是定義時所在的對象拯啦,而不是使用時所在的對象。
并不是因為箭頭函數(shù)內(nèi)部有綁定this的機制熔任,<b>實際原因是</b>箭頭函數(shù)根本沒有自己的this褒链,它的this是繼承外面的,因此內(nèi)部的this就是外層代碼塊的this疑苔。