請看如下兩個函數:函數
function a(){ alert("a") }//函數1 var b= function(){ alert("b") }//函數2
它們倆有何不一樣呢?翻開書,做者會告訴咱們,前者爲函數聲明,後者爲函數表達式。函數聲明做爲一種聲明,固然會在預編譯階級有所動做(聲明提早),而函數表達式則不會。另外一個區別是,函數聲明是語句,語句是沒有返回值,不能直接加一對括號讓它們執行,例如:spa
function a (){ alert("a") }();//報錯 var b = function(){ alert("b") }();//正確
糾正:給 function 外套一對括號就不報錯了,括號是表達式,是表達式就有返回值,因此能夠在後面加一對括號讓它們執行,例如:code
(function a (){ alert("a") })();//沒有問題
另外,咱們知道,函數名的做用就是用來引用的,如今沒用了,咱們是否是能夠把它去掉呢?io
(function (){ alert(arguments.callee) })();//彈出自身
注意:JS中的函數不主動調用時不會加載的時候運行的,下面兩種方法均可以:編譯
(function abc(){ alert(22); })();//讓函數自動運行 function abc(){ alert(22); } abc();//讓函數自動運行