(function($) {
// 插件代碼
$.fn.myPlugin = function() { ... };
})(jQuery);
閉包內部只能存取傳入的參數($)與區域變數,不依賴 window.$ 或 window.jQuery。即使外部修改了全域 $,插件內部的 $ 仍指向正確的 jQuery 物件。
不同插件、不同程式庫可能都使用 $ 符號(如 Prototype、MoTools)。閉包建立**獨立作用域**,變數不會洩漏到全域,也不会被外部同名變數覆蓋,實現「沙箱隔離」。
有些頁面執行 jQuery.noConflict() 釋放 $,此時只有 jQuery 可用。閉包參數命名為 $,實參傳 jQuery,內部**統一用 $ 寫代碼**,外部無論 $ 是否被佔用都能正常運行。
// ❌ 無閉包:污染全域、依賴全域 $、易衝突
var myPlugin = function() { ... };
$.fn.myPlugin = myPlugin;
var $ = 'other lib'; // 破壞後續代碼
// ✅ 有閉包:安全隔離
(function($) {
$.fn.myPlugin = function() { ... };
})(jQuery);
var $ = 'other lib'; // 不影響插件內部
現代專案建議用模組化打包,但理解閉包機制有助於維護舊專案與除錯。
記住:**閉包 = 私有作用域 + 參數鎖定**,是 JavaScript 模組化的基石。