自调用这个匿名函数
这样解释器会报错
为什么呢? 原因可以看一个普通js函数的调用
这是一个函数声明,如果在这么一个声明后直接加上括号调用,解析器不能理解而会报错:
而a函数申明时候,调用就可以直接加 ()
这里可以看出无论是命名函数还是匿名函数,都是函数申明,而直接对匿名函数加 () 之后,解释器就不能理解而报错了
要自调用匿名函数,就需要把匿名函数声明语句变成一个表达式
期望是立即调用一个具名函数表达式,结果是声明了函数 g。末尾的括号作为分组运算符,必须要提供表达式做为参数。所以那些匿名函数附近使用括号或一些一元运算符的惯用法,就是来引导解析器,指明运算符附近是一个表达式。
按照这个理解,可以举出五类,超过十几种的让匿名函数表达式立即调用的写法:( function() {}() )
( function() {} )()
[ function() {}() ]
~ function() {}()
! function() {}()
+ function() {}()
- function() {}()
delete function() {}()
typeof function() {}()
void function() {}()
new function() {}()
new function() {}
var f = function() {}()
1, function() {}()
1 ^ function() {}()
1 >function() {}()