对于一个js匿名函数
function (){alert('message')}
自调用这个匿名函数
function (){alert('message')}
这样解释器会报错
为什么呢? 原因可以看一个普通js函数的调用
function a(){alert('message')} // undefined
这是一个函数声明,如果在这么一个声明后直接加上括号调用,解析器不能理解而会报错:
function a(){alert('message')}() // SyntaxError: unexpected_token
而a函数申明时候,调用就可以直接加()
a() // undefined
这里可以看出无论是命名函数还是匿名函数,都是函数申明,而直接对匿名函数加()
之后,解释器就不能理解而报错了
要自调用匿名函数,就需要把匿名函数声明语句变成一个表达式
!function(){alert('message')}() // true
+function(){alert('message')}() // NaN
-function(){alert('message')}() // NaN
~function(){alert('message')}() // -1
(function(){alert('message')})() // undefined
(function(){alert('message')}()) // undefined
以上都是通过一元运算符或者括号,这样解释器就可以知道,这不是函数申明,而是函数表达式.