嚴(yán)格模式
ES6 的模塊自動(dòng)采用嚴(yán)格模式,不管你有沒(méi)有在模塊頭部加上"use strict";棵帽。
嚴(yán)格模式主要有以下限制。
變量必須聲明后再使用 例如:let
函數(shù)的參數(shù)不能有同名屬性壮莹,否則報(bào)錯(cuò) 例如:const let
不能使用with語(yǔ)句
不能對(duì)只讀屬性賦值扛邑,否則報(bào)錯(cuò) 例如:const
不能使用前綴0表示八進(jìn)制數(shù),否則報(bào)錯(cuò)
不能刪除不可刪除的屬性昨凡,否則報(bào)錯(cuò) 例如:數(shù)組的length
不能刪除變量delete prop爽醋,會(huì)報(bào)錯(cuò),只能刪除屬性delete global[prop]
eval不會(huì)在它的外層作用域引入變量
eval和arguments不能被重新賦值
arguments不會(huì)自動(dòng)反映函數(shù)參數(shù)的變化
不能使用arguments.callee
不能使用arguments.caller
禁止this指向全局對(duì)象
不能使用fn.caller和fn.arguments獲取函數(shù)調(diào)用的堆棧
增加了保留字(比如protected便脊、static和interface)
2蚂四、let 與 const
es5中的var變量 , 1)沒(méi)有塊級(jí)作用域;2)指向全局遂赠,可以解析和變量的提前聲明田度;3)可以相互覆蓋
es6中的const 主要是為了讓變量更加安全,不會(huì)相互覆蓋(只讀屬性)
es6中的let 1)沒(méi)有解析與變量的提前聲明解愤,只能聲明后調(diào)用镇饺; 2)不指向全局,塊級(jí)作用域送讲,作用域更安全奸笤;3)不能重復(fù)聲明,否則會(huì)報(bào)錯(cuò)
箭頭函數(shù)注意的四點(diǎn):
(1)函數(shù)體內(nèi)的this對(duì)象哼鬓,就是定義時(shí)所在的對(duì)象监右,而不是使用時(shí)所在的對(duì)象。
(2)不可以當(dāng)作構(gòu)造函數(shù)异希,也就是說(shuō)健盒,不可以使用new命令,否則會(huì)拋出一個(gè)錯(cuò)誤称簿。
(3)不可以使用arguments對(duì)象扣癣,該對(duì)象在函數(shù)體內(nèi)不存在。如果要用憨降,可以用Rest參數(shù)代替父虑。
(4)不可以使用yield命令,因此箭頭函數(shù)不能用作Generator函數(shù)授药。
綁定this
箭頭函數(shù)可以綁定this士嚎,顯示綁定this的寫(xiě)法(call、apply悔叽、bing)莱衩,call、apply的作用就是能夠改變this的指向
繼承:原型繼承娇澎、原型鏈繼承笨蚁、call/apply繼承
ES6 模塊之中,頂層的this指向undefined九火,即不應(yīng)該在頂層代碼使用this赚窃。
import是靜態(tài)執(zhí)行,所以不能使用表達(dá)式和變量岔激,這些只有在運(yùn)行時(shí)才能得到結(jié)果的語(yǔ)法結(jié)構(gòu)勒极。
require是運(yùn)行時(shí)加載模塊,import命令無(wú)法取代require的動(dòng)態(tài)加載功能虑鼎。
import和export命令只能在模塊的頂層辱匿,不能在代碼塊之中(比如键痛,在if代碼塊之中,或在函數(shù)之中)匾七。