import 和 require 比較

遵循的規(guī)則

????require/exports是JavaScript社區(qū)中的開發(fā)者自己草擬的規(guī)則,遵循AMD,統(tǒng)治了所有ES6之前的所有模塊化編程

????import/export則是名門正派,是ES6的一個語法標準。遵循CommonJs

? ? 補充:webpack一開始的目的就是打包CommonJs模塊(CommonJs是Node.js的規(guī)范)

? ??????????????babel會把你編寫的import/export最終編譯成require/exports來執(zhí)行

調用時間

? ??require是運行時調用,所以require理論上可以運用在代碼的任何地方。在使用時,完全可以忽略模塊化這個概念來使用require。僅僅把它當做一個node內置的全局函數(shù),它的參數(shù)可以是表達式

????import是編譯時調用,所以必須放在文件開頭

本質:

? ? require是賦值過程,其實require的結果就是對象、數(shù)字、字符串、函數(shù)等,再把require的結構賦值給某個變量

? ? import是解析過程,但是目前所有的引擎都還沒有實現(xiàn)import,我們在node中使用babel支持ES6,也僅僅是將ES6轉碼為ES5再執(zhí)行,import語法會被轉碼為require

? ??ES6 Module(import/export)中倒入模塊的屬性或者方法是強綁定的,包括基礎類型。而CommonJs(require/exports)則是普通的值傳遞(基礎類型)或者引用傳遞(引用類型)

網(wǎng)上例子

在編寫上面的過程中發(fā)現(xiàn),使用import方法調用,在node執(zhí)行的過程中會報錯。

因為當前的node版本不支持import,所以還是需要先使用babel將import編譯成require,所以這里就不好進行比較。

如果引用的是數(shù)組

修改exprt中數(shù)組的值

看看下面的運行結果

那么,這里就對require得出一個結論:對基礎類型是值拷貝、對引用類型的值是淺拷貝

default關鍵字:

????default?是ES6?Module?所獨有的關鍵字,export?default fs?輸出默認的接口對象,import fs from 'fs'?可直接導入這個對象。說白了,它其實就是別名的語法糖(別名是通過 as?關鍵字來取的)

到底是使用require還是import?

????這個問題就目前而言,沒有辦法回答。以為目前所有的引擎都還沒有實現(xiàn)import,import語法會被轉碼為require,這也是為什么在模塊導出時使用module.exprts,在引入模塊時使用import仍然起效。本質上來說,import會被轉碼為require去執(zhí)行。但是從長遠角度來看,還是使用import,在未來瀏覽器引擎支持import的時候,只需要做出很少的改動

參考地址:

地址一(推薦)、地址二


?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 【轉】 遵循的模塊化規(guī)范不一樣 模塊化規(guī)范:即為 JavaScript 提供一種模塊編寫、模塊依賴和模塊運行的方案...
    houruyaogeili閱讀 3,374評論 0 2
  • 本文為阮一峰大神的《ECMAScript 6 入門》的個人版提純! babel babel負責將JS高級語法轉義,...
    Devildi已被占用閱讀 2,131評論 0 4
  • 上一章介紹了模塊的語法,本章介紹如何在瀏覽器和 Node 之中加載 ES6 模塊,以及實際開發(fā)中經(jīng)常遇到的一些問題...
    emmet7life閱讀 2,895評論 0 1
  • 模塊通常是指編程語言所提供的代碼組織機制,利用此機制可將程序拆解為獨立且通用的代碼單元。所謂模塊化主要是解決代碼分...
    MapleLeafFall閱讀 1,254評論 0 0
  • ES6標準發(fā)布后,module成為標準,標準的使用是以export指令導出接口,以import引入模塊,但是在我們...
    涅槃快樂是金閱讀 1,796評論 0 1

友情鏈接更多精彩內容