在看bootstrap源码的时候看到function前面加上了 “!”,感到很好奇,于是特地查了一下。
!function() { ... }();
这前面为什么要加上!号?
function fnA(){alert('msg');}//定义函数 var fnB = function(){alert('msg');}//匿名函数
我们在函数定义后面加上 (); 表示要执行这个函数,要求前面必须是一个表达式。但是,如果我们尝试为一个“定义函数”末尾加上(),解析器是无法理解的。
function msg(){ alert('message'); }();//解析器是无法理解的
我们在function前面加上!就是将function(){...}函数体转为一个函数表达式。
同样的道理也是适用与“+-()~" 等符号,不过具体的符号的使用还是会存在性能的差异(http://www.swordair.com/blog/2011/10/714/)。
~function() { ... }(); //最常用的使用 (function() { ... })();