不積跬步,無以至千里;不積小流退唠,無以成江海
今天在一個js文件里面看到 !function(){}()
這種寫法,看不懂是什么意思荤胁,就網(wǎng)上查找資料瞧预。
我們普通的函數(shù)聲明:
function f1(){
alert("這是一個函數(shù)");
}
我們聲明f1函數(shù),就可以通過
f1();
的方式調(diào)用;
但是如果我們直接在函數(shù)聲明后面添加()
就會報錯:
function f1(){
alert("這是一個函數(shù)");
}()
平時我們可能對括號來調(diào)用匿名函數(shù)的方式更習(xí)慣:
(function(){alert("這是一個匿名函數(shù)")})()
或者:
(function(){alert("這是一個匿名函數(shù)")}())
當(dāng)我們使用
()
時垢油,它將一個函數(shù)聲明轉(zhuǎn)化成了一個表達(dá)式盆驹,解析器不再以函數(shù)聲明的方式處理函數(shù),而是作為一個函數(shù)表達(dá)式處理滩愁,任何消除函數(shù)聲明和函數(shù)表達(dá)式間歧義的方法躯喇,都可以被解析器正確識別
比如下面這些類型都是可以的
!function(){alert("這是一個匿名函數(shù)")}()
+function(){alert("這是一個匿名函數(shù)")}()
-function(){alert("這是一個匿名函數(shù)")}()
~function(){alert("這是一個匿名函數(shù)")}()
跑得慢,聽到的是罵聲硝枉; 跑得快廉丽,聽到的就只是風(fēng)聲