ModuleLoad总结

源码链接

笔记一共分三部分
1、思路总结 2、知识点总结 3、代码规范总结

  • 思路总结
  • 新建全局对象
    (function(global){ global.ModuleLoad={} })(this)
    ModuleLoad设置为全局对象,立即执行函数内声明的均为私有变量,不会污染全局。
  • 为全局对象设置两个特权方法
    global.ModuleLoad = {
    define : defineModule
    ,require : requireModule
    }
    • define
      作用:定义模块 ,
      function( id , deps , factory ) {
      ……
      }
      三个参数分别为:id:模块id,deps:模块依赖,factory:模块的执行内容。
      前两个是可选参数,第三个为必填参数,模块依赖需要是数组。
      考虑:
      1、如果模块是匿名,即用户只写了factory或者deps+factory,程序应该根据模块的路径为模块命名,保证每个模块都有自己独一无二的名字。
      setModule( id , deps , factory )
      modules是一个对象,每个属性对应着已经定义过的模块,每次定义模块时都要检查模块是否已经被定义过,对已经定义过的模块则跳过。
      难点1:根据路径获取匿名模块的名字。
      2 、判断模块的依赖是否加载完毕。
      triggerCreate( module , moduleName )
      这块的逻辑 太混乱!
      step1:判断模块的依赖是否全部加载完毕,如果没有,则跳出函数,执行后续的checkDeps( module.deps , moduleName ) ,可以对未加载的模块进行加载。
      step2:模块只有当模块执行完自己的回调后,其状态才会修改为done,当模块的依赖全部加载完毕 ,则createModuleInfo( exports , _exports , id , module.factory ),对已加载完依赖的模块的infor属性赋值为回调函数exports的对象。
      难点2 需要在回调函数内使用require exports
      如果模块加载完毕 ,则判断一下,该模块是否被全局require过,如果有,则需要对requires数组进行遍历,看一下每个元素的arr属性(保存着依赖),检查一下该模块是否在里面 ,如果有 则 对result数组赋值,减少resultlen的值,当值为零时 ,说明 可以执行这组依赖的回调啦。
      step3:加载未被加载的依赖
      checkDeps( module.deps , moduleName )
      如果模块之前就被全局require过 说明已经加载过js啦 ,则没有必要加载啦,加载依赖的的时候 还需要改变模块自己和依赖的状态为doing,并且根据module.make设置依赖关系。
      总结:以上为define,直到所有只要有依赖加载完毕都会trigger一下 ,去判断模块的make的依赖是否全部加载完毕。
    • require
      判断依赖是否被定义过(检查modules),如果没有 就自己loadScript()一下。
  • 知识点总结
    • 难点1
      step1:在js文件内写如下语句就可以获得该js脚本的文件路径
      js文件的路径

      step2:获得.html文件的路径,再进行一步正则匹配,则可以获取js文件的相对路径。
      Paste_Image.png
    • 难点2
      怎么办呢!!回调函数一般都是在主函数内被调用的,需要在主函数调用回调函数时,为回调函数传递实参,exports require 均是 在主函数或者外部定义的变量,require 是一个函数的引用,参数为模块id,返回值为改模块定义时的回调函数。
  • 知识点3
    检测变量的类型
    Paste_Image.png
  • 知识点4
    当向html内引入js文件时,需要先创建script标签,如果需要判断src的加载情况,需要在设置src之前,为onreadystatechange事件绑定函数,当js文件加载完毕后 ,可以移除文件,因为此js文件内定义模块的回调内容被外部对象所引用,即闭包,所以移除js文件后 不影响变量的存在问题。
  • 知识点5
    链接组合,
    Paste_Image.png

    相对路径 与绝对路径组合后,,就很神奇的拼成了 相对路径对应的 绝对路径。。。
  • 代码规范总结
    代码能拆就拆 ,能归类就归类,,,
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容

  • 什么是requireJS? requireJS发挥的作用 简单总结起来就2点 改善了用户体验,它使js文件异步加载...
    阿波罗程序猿阅读 802评论 0 0
  • JS中的模块规范(CommonJS,AMD,CMD),如果你听过js模块化这个东西,那么你就应该听过或Common...
    小虾米前端阅读 4,308评论 0 12
  • 为什么要使用模块化? 最主要的目的:解决命名冲突依赖管理 其他价值提高代码可读性代码解耦,提高复用性 CMD、AM...
    Eazer阅读 630评论 3 1
  • 随着前端业务复杂度的增加,模块化成为一个大的趋势。而在ES6还未被浏览器所支持的情况下,commonjs作为ES6...
    吴高亮阅读 1,038评论 0 3
  • 晚上喝了咖啡,不出意外的很兴奋,到现在还不瞌睡,手机刷了一晚上实在不想再这样无聊下去,可是书也不想看,那就总结下自...
    风景奶茶阅读 290评论 0 1