javaScript的匿名函数形式多样,而且不搞清楚,容易看晕代码。
代码如下:
(function f1() { alert(4); })(); //不是匿名函数也能这样调用!!
void function(){ alert('void water'); }();//据说效率最高,Javascript中void是一个操作符,该操作符指定要计算一个表达式但是不返回值。
!function(){
alert('!water');
}(); //运算符+匿名函数调用
(function(){ alert('water'); }());//小括号+匿名函数,有点强制执行的味道~
代码如下:
错误写法1
(function f1() {
alert(5);
})f1(); //这不是匿名函数了!
另外要注意理解小括号的作用。
//错误写法2 (function () { alert(6); }); //语法没有错误,没有调用的匿名函数,后面也没有机会调用了,因为没有名字,找不到调用入口。
小括号能把我们的表达式组合分块,并且每一块,也就是每一对小括号,都有一个返回值。这个返回值实际上也就是小括号中表达式的返回值。所以,当我们用一对小括号把匿名函数括起来的时候,实际上小括号对返回的,就是一个匿名函数的Function对象。因此,小括号对加上匿名函数就如同有名字的函数般被我们取得它的引用位置了。所以如果在这个引用变量后面再加上参数列表,就会实现普通函数的调用形式。