插件
在全局对象 window 导出的方法
模块化发展历史
- 定义全局函数,一个函数实现一个功能 ```javascript function m1(){
} function m2(){
}
2. 减少全局函数,使用对象作 namespace
```javascript
var obj = {
m1: function m1(){
},
m2: function m2(){
}
}
使用 IIFE 实现全局对象的包裹,封闭作用域
var module = (function(){ function m1(){ } function m2(){ } var obj = { m1: m1, m2: m2 } return { obj: obj } })();
为什么不用构造函数或类,要用立即执行函数
因为在类中,是把功能相关的封闭在一起,但是在模块中,其功能关联性没有这么密切或完全不相关。如果都封闭在同一个类中就不是那么合理。我们会把相关性非常强的封装为一个类。
类是一种思维抽象,类属性和类方法是为描述当前的类所具备的属性与方法。
而用于立即执行函数的原因是 函数立即执行完成之后,作用域会销毁。声明的变量与函数在没有引用(可以通过闭包方式把引用返回出去)时都会被销毁(通过垃圾回收的方式进行对内存回收,不会占用内存),只会有一个返回值,从而做到变量的私有化。
放大模式 与 宽放大模式
通过模块的注入,把依赖私有化
- 放大模式就是注入
宽放大模式是增加
||
当没有传入时有默认值 ```javascript var module = (function($){ function m1(){} function m2(){
} var obj = {
m1: m1,
m2: m2 }
return {
obj: obj
} })(module1 || {});
var module1 = (function(){ var obj = { m1: m1, m2: m2 }
问题
当模块依赖另一个模块时,只能是多对一的简单的依赖关系,过于复杂时没法看清