经常会遇到这种函数写法:
!function() {do something...}()
~function(){do something...}()
js中可以这样创建一个匿名函数:
(function(){do something...})()
//或
(function(){do something...}())
匿名函数后面的小括号()是为了让匿名函数立即执行。
那为什么这么写就会报错呢:
function(){alert(1)}() // Uncaught SyntaxError: Unexpected token
因为function前面没有(或者! ~之类的运算符,js解析器会试图将关键字function解析成函数声明语句,而不是函数定义表达式!
作为组运算符,小括号()会将其内部的表达式当成一个整体,然后返回结果,所以定义一个匿名函数正确的格式就是用小括号将函数体括起来!
同样的! ~ + -等运算符也有同样的效果,这是因为匿名函数也是一种值,这些运算符会将后面的函数体当成一个整体,先对匿名函数进行求值,然后在对结果进行运算!