對于一個js匿名函數(shù)
function (){alert('message')}
自調(diào)用這個匿名函數(shù)
function (){alert('message')}
這樣解釋器會報錯
為什么呢? 原因可以看一個普通js函數(shù)的調(diào)用
function a(){alert('message')} // undefined
這是一個函數(shù)聲明,如果在這么一個聲明后直接加上括號調(diào)用,解析器不能理解而會報錯:
function a(){alert('message')}() // SyntaxError: unexpected_token
而a函數(shù)申明時候,調(diào)用就可以直接加()
a() // undefined
這里可以看出無論是命名函數(shù)還是匿名函數(shù),都是函數(shù)申明,而直接對匿名函數(shù)加()之后,解釋器就不能理解而報錯了
要自調(diào)用匿名函數(shù),就需要把匿名函數(shù)聲明語句變成一個表達(dá)式
!function(){alert('message')}() // true
+function(){alert('message')}() // NaN
-function(){alert('message')}() // NaN
~function(){alert('message')}() // -1
(function(){alert('message')})() // undefined
(function(){alert('message')}()) // undefined
以上都是通過一元運算符或者括號,這樣解釋器就可以知道,這不是函數(shù)申明,而是函數(shù)表達(dá)式.