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)(最簡(jiǎ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"暫時(shí)性死區(qū)"
"暫時(shí)性死區(qū)":在代碼塊內(nèi),使用let命令聲明變量之前,該變量都是不可用的。
只要塊級(jí)作用域內(nèi)存在let命令,它所聲明的變量就“綁定”(binding)這個(gè)區(qū)域,不再受外部的影響。
var tmp = 123;
if (true) {
tmp = 'abc'; // ReferenceError
let tmp;
}
ES6明確規(guī)定,如果區(qū)塊中存在let和const命令,這個(gè)區(qū)塊對(duì)這些命令聲明的變量,從一開始就形成了封閉作用域。凡是在聲明之前就使用這些變量,就會(huì)報(bào)錯(cuò)。
typeof x; // ReferenceError
let x;
上面代碼中,變量x使用let命令聲明,所以在聲明之前,都屬于x的“死區(qū)”,只要用到該變量就會(huì)報(bào)錯(cuò)。因此,typeof運(yùn)行時(shí)就會(huì)拋出一個(gè)ReferenceError。
作為比較,如果一個(gè)變量根本沒有被聲明,使用typeof反而不會(huì)報(bào)錯(cuò)。
typeof undeclared_variable // "undefined"
<b>暫時(shí)性死區(qū)的本質(zhì)就是</b>,只要一進(jìn)入當(dāng)前作用域,所要使用的變量就已經(jīng)存在了,但是不可獲取,只有等到聲明變量的那一行代碼出現(xiàn),才可以獲取和使用該變量。
5.箭頭函數(shù)
當(dāng)我們使用箭頭函數(shù)時(shí),函數(shù)體內(nèi)的this對(duì)象,就是定義時(shí)所在的對(duì)象,而不是使用時(shí)所在的對(duì)象。
并不是因?yàn)榧^函數(shù)內(nèi)部有綁定this的機(jī)制,<b>實(shí)際原因是</b>箭頭函數(shù)根本沒有自己的this,它的this是繼承外面的,因此內(nèi)部的this就是外層代碼塊的this。