1.瀏覽器加載
傳統(tǒng)方法
默認(rèn):同步加載蚯根,遇到后會(huì)停下來,等到執(zhí)行完腳本,再繼續(xù)向下渲染
兩種異步加載的語(yǔ)法:
defer:頁(yè)面渲染完成后再執(zhí)行
async:下載完立即執(zhí)行噪舀,停止渲染;多個(gè)async文件飘诗,下載与倡、執(zhí)行的順序是不確定的
ES6模塊加載規(guī)則
<script>標(biāo)簽+type="module"屬性;瀏覽器處理默認(rèn)是按defer類型來加載執(zhí)行的昆稿,可以加async來改變
利用頂層的this等于undefined這個(gè)語(yǔ)法點(diǎn)纺座,可以偵測(cè)當(dāng)前代碼是否在 ES6 模塊之中
2.ES6模塊與CommonJS模塊的差異
兩者的重大差異:
CommonJS 模塊輸出的是一個(gè)值的拷貝,ES6 模塊輸出的是值的引用溉潭。
CommonJS 模塊是運(yùn)行時(shí)加載净响,ES6 模塊是編譯時(shí)輸出接口。
3.Node加載
概述
ES6 模塊和 CommonJS 采用各自的加載方案喳瓣;
Node 要求 ES6 模塊采用.mjs后綴文件名馋贤;
export、import + .mjs;
require + .js
內(nèi)部變量
ES6模塊加載CommonJS模塊? 畏陕?配乓?
CommonJS模塊加載ES6模塊--使用import()函數(shù)
4.循環(huán)加載
指的是:a腳本的執(zhí)行依賴b腳本,而b腳本的執(zhí)行又依賴a腳本
CommonJS的處理:
CommonJS是加載時(shí)執(zhí)行,一旦出現(xiàn)某個(gè)模塊被"循環(huán)加載"扰付,就只輸出已經(jīng)執(zhí)行的部分堤撵,還未執(zhí)行的部分不會(huì)輸出
ES6的處理:
函數(shù)形式--因?yàn)闀?huì)有函數(shù)提升