模块化相关

题目1: 为什么要使用模块化?

使用模块化的主要目的:解决命名冲突和依赖管理

还有可以提高代码的可读性,代码解耦,提高复用性。

题目2: CMD、AMD、CommonJS 规范分别指什么?有哪些应用

AMD,Asynchronous Module Definition,异步模块定义。AMD规范指定一种机制,在该机制下模块和依赖可以异步加载。这对浏览器端的异步加载尤其适用。
语法:define(id?,dependencies?,factory)
id:定义中模块的名字,可选参数,如果没有提供,则默认为模块加载器请求的指定脚本的名字。
denpendencies:依赖参数,可选。
factory:需要执行的函数或对象,必选。
例:

define('modal',['jQuery','dialog'],function($,Dialog){
  $('.modal').show()
  Dialog.open()
})

表示,定义的模块名为modal,使用了jQuery和Dialog方法,调用模块'jQuery','dialog'。

实现AMD的库:'RequireJS','curl','Dojo'

CommonJS 是服务器端模块的规范,Node.js采用这个规范。

require和exports

require,一个自由变量,是一个函数,接收一个模块标识符,返回该模块所输出的API
exports,一个自由变量,是一个函数,模块输出的唯一表示方法,即将各种输出(API)加入到exports中
例:

//math.js
exports.add = function(){
  var sum = 0,i = 0, args = arguments, l = args.length
  while(i < l){
    sum += args[i++]
  }
return sum
}  //写一个add方法加入到exports中

//increment.js
var add = require('math').add    //通过require接收math模块,并执行,调用里面的add方法
exports.increment = function(val){
  return add(val,1)  
}    //写一个increment方法加入到exports中

//program.js
vat inc = require('increment').increment    
//通过require接收increment模块,并执行,increnment模块里面的require接收math模块并执行,最终实现add,math.js为increment.js的依赖模块。
var a = 1
inc(a)  // 2

CMD,Common Module Definition,也是一种模块化思想。一个模块就是一个文件
语法:define(factory)
例:

//math.js
define(function(require,exports,module){
  exports.add = function(){
    var sum = 0,i = 0, args = arguments, l = args.length
    while(i < l){
      sum += args[i++]
    }
    return sum
  } 
})

//increment.js
define(function(require,exports,module){
  var add = require('math').add
  exports.increment = function(val){
    return add(val,1)  
  } 
})

//program.js
define(function(require,exports,module){
  vat inc = require('increment').increment
  var a = 1
  inc(a)  // 2

  module.id == "program"
})

你可能感兴趣的:(模块化相关)