require相當於module.exports的傳送門,module.exports后面的內容是什么,require的結果就是什么,對象、數字、字符串、函數……再把require的結果賦值給某個變量,相當於把require和module.exports進行平行空間的位置重疊。 而且require理論上可以運用在代碼的任何地方,甚至不需要賦值給某個變量之后再使用,比如: require('./a')(); // a模塊是一個函數,立即執行a模塊函數 var data = require('./a').data; // a模塊導出的是一個對象 var a = require('./a')[0]; // a模塊導出的是一個數組 在使用時,完全可以忽略模塊化這個概念來使用require,僅僅把它當做一個node內置的全局函數,它的參數甚至可以是表達式: require(process.cwd() + '/a'); 但是import則不同,它是編譯時的(require是運行時的),它必須放在文件開頭,而且使用格式也是確定的,不容置疑。它不會將整個模塊運行后賦值給某個變量,而是只選擇import的接口進行編譯,這樣在性能上比require好很多。 從理解上,require是賦值過程,import是解構過程 ES7很快也會發布,js引擎們會盡快實現ES6標准的規定,如果一個引擎連標准都實現不了,就會被淘汰, ES6是遲早的事 。如果你現在仍然在代碼中部署require,那么等到ES6被引擎支持時,你必須升級你的代碼,而如果現在開始部署import,那么未來可能只需要做很少的改動。