CommonJS與ES6module
- 因?yàn)?strong>CommonJS的require語(yǔ)法是同步的命爬,所以就導(dǎo)致了CommonJS模塊規(guī)范只適合用在服務(wù)端锦爵,而ES6模塊無(wú)論是在瀏覽器端還是服務(wù)端都是可以使用的,但是在服務(wù)端中形用,還需要遵循一些特殊的規(guī)則才能使用 就轧;
- CommonJS模塊輸出的是一個(gè)值的拷貝,而ES6模塊輸出的是值的引用尾序;
- CommonJS模塊是運(yùn)行時(shí)加載钓丰,而ES6模塊是編譯時(shí)輸出接口;
- 因?yàn)閮蓚€(gè)模塊加載機(jī)制的不同每币,所以在對(duì)待循環(huán)加載的時(shí)候携丁,它們會(huì)有不同的表現(xiàn)。CommonJS遇到循環(huán)依賴的時(shí)候,只會(huì)輸出已經(jīng)執(zhí)行的部分梦鉴,后續(xù)的輸出或者變化李茫,是不會(huì)影響已經(jīng)輸出的變量。而ES6模塊相反肥橙,使用import加載一個(gè)變量魄宏,變量不會(huì)被緩存,真正取值的時(shí)候就能取到最終的值存筏;
- 關(guān)于模塊頂層的this指向問(wèn)題宠互,在CommonJS頂層,this指向當(dāng)前模塊椭坚;而在ES6模塊中予跌,this指向undefined;