何为匿名函数
很多东西我们可以通过字面就可以理解,当然也不是所有的都可以通过字面能理解的,因为程序语言毕竟是个很抽象的东西,光从字面理解肯定不够也不行,但是匿名函数就可以。所谓匿名函数就是没有名称的函数,例如下面这种:
function (b) { a=1; c=a+b; return c; }
上面很简单,就是在我们定义一个函数的时候,我们并没有给它一个名称,这就是我们的匿名函数!
但是问题来了,匿名函数如何调用呢,我们都知道有名称的函数调用方式,例如:
function jiujiu(b) { a=1; c=a+b; return c; } jiujiu(3)//这样我们就完成了上面函数的调用
但是匿名函数没有名称呀,我们怎么调用呢?
关于匿名函数的调用的方式,非常之多,这也是为什么说javascript其实是个非常灵活的语言,都说javascript简单,其实不然,越灵活代表难度非常高!现在我们来看看各种匿名函数的调用方式:
一 调用函数 得到返回值 强制运算符使函数运行
(function (x,y) { // body... alert(x+y); return x+y }(3,4) );
二 调用函数,得到返回值。强制函数直接里执行再返回一个引用,引用再去调用执行
(function (x,y) { // body... alert(x+y); return x+y; } )(3,4);
三 使用void
void function (x,y) { // body... alert(x+y); return x+y; }(3,4);
四 使用-/+运算符
-function (x,y) { // body... alert(x+y); return x+y; }(3,4); +function (x,y) { // body... alert(x+y); return x+y; }(3,4); --function (x,y) { // body... alert(x+y); return x+y; }(3,4); ++function (x,y) { // body... alert(x+y); return x+y; }(3,4);
五 使用波浪符
~function (x,y) { // body... alert(x+y); return x+y; }(3,4);
六 你们函数执行放在中括号内
[function (x,y) { // body... alert(x+y); return x+y; }(3,4)];
七 匿名函数前面加typeof
typeof function (x,y) { // body... alert(x+y); return x+y; }(3,4);
八 匿名函数前面加 new(慎用)
new function (x,y) { // body... alert(x+y); return x+y; }(3,4);
九 逗号运算符 按位异或运算符 按比较运算符
1,function (x,y) { // body... alert(x+y); return x+y; }(3,4); 1^function (x,y) { // body... alert(x+y); return x+y; }(3,4); 1>function (x,y) { // body... alert(x+y); return x+y; }(3,4);
最后我们看看错误的调用方式:
function (x,y) { // 这种调用方式说简单点就是根本没有调用 导致调用失败 alert(x+y); return x+y; }(3,4);
上面就是匿名函数的调用方式 通过上面的方法其实还可以演化出一种就是函数加逗号再跟一个匿名函数,请看下面例子:
function (x,y) { // body... alert(x+y); return x+y; }(3,4),function (x,y) { //这个匿名函数被调用执行了 alert(x+y); return x+y; }(3,4);