import和require都是被模塊化使用
1. a. require是CommonJs的語法(AMD規范引入方式),CommonJs的模塊是對象。
b. import是es6的一個語法標准(瀏覽器不支持,本質是使用node中的babel將es6轉碼為es5再執行,import會被轉碼為 require),es6模塊不是對象
2. a. require是運行時加載整個模塊(即模塊中所有方法),生成一個對象,再從對象上讀取它的方法(只有運行時才能得到這 個對象,不能在編譯時做到靜態化),理論上可以用在代碼的任何地方
b. import是編譯時調用,確定模塊的依賴關系,輸入變量(es6模塊不是對象,而是通過export命令指定輸出代碼,再通過 import輸入,只加載import中導的方法,其他方法不加載),import具有提升效果,會提升到模塊的頭部(編譯時執行)
export和import可以位於模塊中的任何位置,但是必須是在模塊頂層,如果在其他作用域內,會報錯
es6這樣的設計可以提高編譯器效率,但沒法實現運行時加載
3. a. require是賦值過程,把require的結果(對象,數字,函數等),默認是export的一個對象,賦給某個變量(復制或淺拷貝)
b. import是解構過程(需要誰,加載誰)
寫法:
1. require/exports(僅有下面的三種簡單寫法)
const a=require('a') //真正被require出來的是來自module.exports指向的內存塊內容
exports.a=a //exports 只是 module.exports的引用,輔助module.exports操作內存中的數據
module.exports=a
2. import / export
import a from 'a'
import { default as a } from 'a'
import * as a from 'a'
import { fun1,fun2 } from 'a'
import { fun1 as myfunction } from 'a'
import a, { fun1 } from 'a'
---------------------------------------------------------
export default a
export const a=1
export functon a{ }
export { fun1,fun2 }
export * from 'a'
---------------------