seajs CMD模块化

1.定义:

  define(id, deps, function (require, exports,module) {

    var a = require('/a')

    a.doSomething()
  })

2.例子
  // main.js
  define(function(require, exports, module){
    document.onclick = function(){
      var a = require('/a')
      a.test()
    }
  })

  // a.js
  define(function(require, exports,module){
    exports.test = function(){
      console.log('a.test')
    }
    })

3. return 方式向外提供接口

  define(function(require, exports, module){
    return {
      foo: 'bar'
      }
    })

4.入口
  <script>
    seajs.use(id, callback)
    seajs.use(['./a', './b'], function(a, b){})//并发加载模块 a 和模块 b,并在都加载完成时,执行指定回调
  </script>

5.DOMReady
  seajs.use(['jquery', './main.js'], function($, main){
    $(document).ready(function(){
    })
  })

6.循环加载

7.比较

  a、所依赖模块的执行时机

  对于依赖的模块,AMD是提前执行,CMD是延迟执行

  AMD在加载模块完成后就会执行该模块,所有模块都加载执行完后会进入require的回调函数,执行主逻辑,这样的效果就是依赖模块的执行顺序和书写顺序不一定一致,看网络速度,哪个先下载下来,哪个先执行,但是主逻辑一定在所有依赖加载完成后才执行。不过,新版本的RequireJS也可以延迟执行

  CMD加载完某个依赖模块后并不执行,只是下载而已,在所有依赖模块加载完成后进入主逻辑,遇到require语句的时候才执行对应的模块,这样模块的执行顺序和书写顺序是完全一致的。如果使用require.async()方法,可以实现模块的懒加载,即不执行不下载

  b、CMD推崇依赖就近,AMD推崇依赖前置

posted @ 2018-10-30 16:53  胖糖糖爱吃肉  阅读(137)  评论(0编辑  收藏  举报