+function (){}
-function (){}
!function (){}
~function (){}
(function (){})()
這種寫法可以保證匿名函數立即運行且運行一次
傳入的 window 對象從全局變成了局部對象 優點有
1. 運行更快了
2. 可以隨意改名 比如 a, 這樣便於壓縮
3. 可以傳入其他庫而不導致沖突
舉例子
(function ($, w, d, undefined){
$(document).addClass('test');
})(jQuery, window, document);
這樣的情況下 JQ 可以無痛使用 也不需要使用 noConflict 方法避免沖突
至於傳遞 undefined 是因為 ES3 時代這個玩意兒是可以被修改的……真的有人會去做比如 undefined = true 這樣的事情 所以說額外定義一個真正的 undefined 可以保證匿名函數內部的 undefined 是真正的 undefined