commonJS模塊機制出現的目的是爲了構建js在web服務器,桌面程序,瀏覽器等方面造成生態系統。而node js就是這種規範的一種實現,用requird來引入其餘文件,一樣,npm也遵循了commonJS定義的包規範,從而造成了一套完整的生態系統。javascript
模塊定義並導出
例若有以下一個名爲circle.js的文件java
exports.getName = function(name) { return name }
模塊載入node
var circle = require('/circle.js') console.log(circle.getName('WPY'))
模塊加載策略
node模塊主要能夠分爲兩類:web
原生模塊和自定義模塊,所謂原生模塊就是node本身定義的模塊,例如HTTP,fs模塊,此類模塊加載速度最快。
還有一類是自定義模塊,包括包模塊,和咱們本身定義的文件。不管是原生模塊仍是自定義模塊在第一次加載後都會被node緩存,因此第二次請求時是不會有開銷的。
原生模塊加載:
require()方法在解析文件名以後,最優先在模塊緩存中查找,而後在node的原生模塊中查找
從文件加載
module.path 對於每個被加載的文件模塊,在建立這個模塊對象的時候都會有一個paths屬性。其路徑指向引入模塊的路徑。
在請求絕對路徑模塊時,不會去遍歷node_module加載速度最快。npm
高介函數
高介函數是將函數做爲參數,或者做爲返回值的函數。編程
function foo(X) { return function() { return x } }
NODE帶來的最大特性莫過於機遇事件驅動的非阻塞IO。promise
異步編程解決方案瀏覽器
事件監聽器模式是普遍應用於異步編程,是回調函數的時間化,又稱發佈/訂閱模式。
//訂閱緩存
emitter.on("event1", function(message){ console.log(message) })
//發佈服務器
emitter.emit("event1", "I am message")
promise對象具備三種狀態,未完成態,完成態,失敗態。
promise對象要具備then方法,對於then 方法有如下幾點要求
1.接受完成態,錯誤態的回調方法。
2.只接受function,其他對象將被忽略
3.繼續返回promise對象,以實現鏈式調用
next()