2015-01-15 56 views
0

大多數語言使用 '進口' 指令來加載其他模塊的代碼,如 的java -的NodeJS使用變量賦值來加載模塊

import a.b.c 

的elisp -

(load a) 

蟒 -

from a import b 

但是,爲什麼nodejs使用變量表達式來加載其他模塊函數,如

var a = require('a') 

我明白了,對於像tern.js-emacs的JavaScript的大多數IDE,nodeclipse都無法做到的源代碼查找(加載的模塊)正確,因爲IDE已經運行的代碼(或)做的eval到找出加載的模塊對象包含的屬性。

+2

的ECMAScript 5.1(https://es5.github.io/)是Node.js的運行語言。它沒有導入。當ES6支持它時,節點將支持它。同時還有ES6 - > ES5轉換器,如果您願意,您可以在JS中使用導入。 – generalhenry

+0

,以便您可以使用該變量來引用返回的對象。例如'a.someMethodOfA();'。 – Todd

回答

0

可以說JS屬於語言類,其中的想法,一切都是平等的對象是已經指導了其開發的「理念」的一部分。節點的require是環境提供的功能(對象),也是module對象。這種模式被稱爲Common JS格式。

你其實不必指定需要的功能給一個變量的結果。這在實踐中很少見,但是你所調用的節點模塊可能只是被調用來引發一個動作,例如可能需要sugar.js,它會改變一些本地對象,但它本身沒有方法提供,因此分配返回值(在模塊執行期間提供的module.exports對象)沒有意義。給一個變量不分配模塊的

一個更常見的例子是,當一個使用require只是抓住一些屬性從模塊 - 例如var x = require('module').methodOfInterest。同樣,一些模塊返回一個構造函數,所以你可能有時會看到var instance = new (require('ConstructorModule'))(options)(這在我看來是醜陋的;要求一般應在文件的頂部進行分組,並作用於事後才)。

注:這確實沒有具體回答你的問題那麼賠率是很高,它會被封閉,SO-不合適的。