當即調用的函數表達式---IIFE

有些人則稱爲「自執行的匿名函數」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 '=>'
指望是當即調用一個具名函數表達式,結果是聲明瞭函數 f。末尾的括號做爲分組運算符,必需要提供表達式作爲參數

那麼咱們應該如何建立一個自執行的匿名函數呢?咱們可讓引擎理解()前面的是一個表達式而不是一個函數,寫法如: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
相關文章
相關標籤/搜索