這篇主要講最後的seajs源碼運行順序。固然,前面那些零零碎碎的就直接忽略了,就從module那塊開始數組
seajs總的函數調用順序圖以下:app
seajs.use調用後會調用Module.preload,若是有預加載模塊的話,就須要先調用Module.use(preloadMods,function(){..},...),來完成模塊的預加載,在其完成後再正式調用Module.use(ids,...)函數
mod.load中的resolve函數主要是將mod所依賴的一系列文件路徑都計算出來,而後造成數組返回。在load經過循環,逐個的用Module.get獲得module實例,而後經過fetch,調用seajs.request獲得該文件並執行,因爲獲得的js文件的話通常有define包裹,define的做用是將factory函數解析,判斷其依賴的項目,而後添加的m實例的依賴下,在後面的m.load運行時,就會將這些依賴項目抓取過來,若依賴項目中還有依賴,就會再次進入解析-正則匹配-添加依賴-load抓取。fetch
在一塊兒依賴都完成時,就會執行m.onload函數,這個函數在最後會對依賴這個m的module進行逐一檢查,分別減去他們的_remain,並判斷remain是否等於0,若等於0,就對這個mod執行mod.onload函數。對象
在最後的onload函數中,將每一個依賴的js都進行執行,這是的exec函數會將原來拿到的js文件中產生的module下的factory進行運行,返回的對象會放在exports下,在最後經過callback.apply(global,exports)來將前面獲得的對象做爲函數參數傳入。blog
博客地址:http://www.cnblogs.com/cyITtech/rem