有些人則稱爲「自執行的匿名函數」javascript
在閉包中,咱們常常須要使用到匿名函數,我感受閉包就是一種匿名函數,子集。html
可是直接在匿名函數後面調用函數是會出錯的。好比:java
function () { alert("Hello IIFE"); }();
// Uncaught SyntaxError: Unexpected token (
咱們指望系統當即調用這個匿名函數,可是系統會覺得咱們是在進行函數聲明,進行函數聲明須要有函數名稱。而上面則沒有,就會報錯 在JavaScript高級程序設計第185頁上講,函數聲明後面不能跟圓括號。閉包
那麼咱們爲它添加函數名咯,還會有一個小問題,以下:函數
1 function f() { 2 alert("IIFE"); 3 }(); 4 // Uncaught SyntaxError: Expected () to start arrow function, but got ';' instead of '=>'
那麼咱們應該如何建立一個自執行的匿名函數呢?咱們可讓引擎理解()前面的是一個表達式而不是一個函數,寫法如:spa
(function () { alert("IIFE"); })(); //或者 (function () { alert("IIFE"); }());
咱們爲匿名函數添加括號以後,被解析器解析爲表達式,那麼咱們也能夠這樣使用:設計
1 [ function () {}()]; 2 3 ~ function () {}(); 4 ! function () {}(); 5 + function () {}(); 6 - function () {}(); 7 8 new function () {}; 9 new function () {}() ; 10 11 var i = function () {}(); 12 13 0, function () {}(); 14 true && function () {}();
你們有什麼補充的話請留言哈,麼麼噠~~~code
以上內容參考:htm
來源:阮一峯javascript:http://javascript.ruanyifeng.com/grammar/function.html#toc23blog
來源:知乎 長天之雲 http://www.zhihu.com/question/20249179/answer/14487857