以下是JS的匿名函數(shù),這三種形式比較有什麼差別,各有什麼特色?
// 形式1
(function(a){
console.log(a);
})(33)
// 形式2
!function(){
console.log(2222222222)
}()
// 形式3
(function(a){
console.log(a);
}(100))
這三種寫法其實沒有本質上的區(qū)別,都是為了編譯器(解釋器)function(a){ console.log(a) }和()看作一個整體執(zhí)行。應該更多的是習慣上的區(qū)別,我個人更喜歡第一種,感覺邏輯上更說的過去。有的人喜歡第二種,用()把整個函數(shù)呼叫括起來,這個可以更直白的表示這段程式碼是一個整體。聽說老外喜歡用!或void
第一種是自執(zhí)行函數(shù)的常用方式,括號內包裹的是函數(shù)體本身,意味著執(zhí)行函數(shù)定義,傳回一個函數(shù),緊接著後面的括號表示傳入?yún)?shù),執(zhí)行這個函數(shù)。
第二種和第三種,其實是一樣的,分別使用!
和 括號
『包裹』函數(shù)體加傳參部分,都表示執(zhí)行這個程式碼區(qū)塊,執(zhí)行程式碼區(qū)塊時,函數(shù)的名稱可以省略。
第二種和第三種不同的地方就是前者沒有參數(shù),回傳函數(shù)執(zhí)行結果取非後的布林值,後者有參數(shù),預設回傳函數(shù)回傳值。