JavaScript文件中; !function ,win, undefined {}

+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