子產品(用軟體工程的方法,管理網頁的業務邏輯)
"立刻執行函數"
為了不暴露私有成員,使用"立刻執行函數",将有關的屬性、方法封裝在一個函數的作用域中
var m = (function () {
var count = 0;
var f1 = function () {
//...
};
var f2 = function () {
//...
};
return {
f1: f1,
f2: f2
};
})();
m.count
>>undefined //外部代碼無法讀取内部的count變量
"放大模式"
情形:
- 一個子產品很大,必須分成幾個部分
- 或者一個子產品需要繼承另一個子產品
var moduleA = (function (mod){
mod.f = function () {
//...
};
return mod;
})(moduleA);
為子產品moduleA添加了一個新方法F(),然後傳回新的moduleA子產品
在實際中,子產品中的各個方法加載的順序可能是不同的,若是第一個加載的是不存在的對象,則采用
"寬放大模式"(立即執行函數的參數可以為空對象)
var module = (function(mod){
//
return mod
})({} || window.module);
全局變量的輸入
為了在子產品内部調用全局變量,必須顯式地将其他變量輸入子產品
var module = (function ($, YAHOO) {
//...
})(jQuery, YAHOO);
//立即執行函數可以起到命名空間的作用
(function($, window, document) {
function handleEvents() {
//...
}
function initialize() {
//...
}
function destruction() {
//...
}
//對外隻暴露init和destroy接口
window.finalAction = {
init : initialize,
destroy : destruction
}
})( jQuery, window, document );