在看bootStrap插件的时候发现这种写法函数
!function(){}这种写法,不解,后来看到网上的文章才知道,这是匿名函数的一种写法spa
1. 什么是自执行的匿名函数?
它是指形如这样的函数: (function {// code})();
2. 疑问
为何(function {// code})();能够被执行, 而function {// code}();却会报错?
3. 分析
(1). 首先, 要清楚二者的区别:
(function {// code})是表达式, function {// code}是函数声明.
(2). 其次, js"预编译"的特色:
js在"预编译"阶段, 会解释函数声明, 但却会忽略表式.
(3). 当js执行到function() {//code}();时, 因为function() {//code}在"预编译"阶段已经被解释过, js会跳过function(){//code}, 试图去执行();, 故会报错;
当js执行到(function {// code})();时, 因为(function {// code})是表达式, js会去对它求解获得返回值, 因为返回值是一 个函数, 故而遇到();时, 便会被执行.插件
另外, 函数转换为表达式的方法并不必定要靠分组操做符(),咱们还能够用void操做符,~操做符,!操做符……code
如:string
!
function
(){
alert(
"另类的匿名函数自执行"
);
}();