seajs 源碼分析四

這篇主要講最後的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

相關文章
相關標籤/搜索