2013-01-01 57 views
3

我遇到了這種形式的自調函數。什麼是「!」?JavaScript自調用函數Not

!function (a) { 
    // something 
}(1); 

我不知道是否存在問題。對不起,如果這是一個重複。

+1

看起來像()'d一樣的目的,以防止它被解析爲函數聲明。 –

回答

4

通過使用!,它正在評估匿名函數(從而要求它運行)。沒有這個,你會得到一個錯誤。

而且,正如其他人所說,如果您正在分配或評估它,它會顛倒任何函數返回的結果。

+0

啊我明白了。我通常使用(function(){console.log('body');})()。這只是另一種做法,但可以保存1個字符。 –

+0

@ Grace-Shao - 是的,情況正是如此。如果您關心函數返回的內容,那麼它具有更大的意義,否則使用相同的函數。 – Apropos

0

不是沒有意義的,除非函數返回值被賦值給某物。如果分配,左側將得到不是自執行功能的結果。結果將是顯式返回的值或函數中最後一次計算的值。

0

如果它返回的東西,它只是逆結果:

console.log(!(function(a) { return (a == 1); })(1)); 

將返回false。如果你給0或其他任何東西,則爲true。