JavaScript中匿名函数的多种写法

匿名函数没有实际名字,也没有指针,怎么执行滴? 
其实大家可以看看小括号的意义就应该可以理解。小括号有返回值,也就是小括号内的函数或者表达式的返回值,所以说小括号内的function返回值等于小括号的返回值,不难理解 (function(){})()可以将没有名字的函数执行了把… 
关于匿名函数写法,很发散~ 
最常见的用法: 
代码如下:

(function() { 
alert('water'); 
})(); 

当然也可以带参数: 
代码如下:

(function(o) { 
alert(o); 
})('water'); 

想用匿名函数的链式调用?很简单: 
代码如下:

(function(o) { 
alert(o); 
return arguments.callee; 
})('water')('down'); 

常见的匿名函数都知道了,看看不常见的: 
代码如下:

~(function(){ 
alert('water'); 
})();//写法有点酷~ 

代码如下:

void function(){ 
alert('water'); 
}();//据说效率最高~ 
这里补充一下为什么加void效率会比较高
这是因为加void就相当于定义了该函数的原型,搜索该函数的时候就可以直接找到,不用大面积搜索,因此会比较快!这是我在群里问得到的解析,加上自己的理解,欢迎不同见解!


代码如下:

+function(){ 
alert('water'); 
}(); 

代码如下:

-function(){ 
alert('water'); 
}(); 

代码如下:

~function(){ 
alert('water'); 
}(); 

代码如下:

!function(){ 
alert('water'); 
}(); 

代码如下:

(function(){ 
alert('water'); 
}());//有点强制执行的味道~ 


那为什么加上这些符号呢?
弄清这个问题需要弄清函数表达式(function expression)和函数声明(function declaration)的区别:
函数表达式:
/* 函数表达式中的函数可以为匿名函数,也可以有函数名,但是该函数实际上不能直接使用,只能通过表达式左边的变量 a 来调用。*/
var a = function(){
alert('Function expression');
}
var b = new a();
函数声明:
// 函数声明时必须有函数名
function a(){
alert('Function declaration');
}
a();
而这段代码:
<script> 
~function() { 
alert("hello, world."); 
}
  ()
</script>
实际上可以分为两个部分(黑体部分和斜体部分)。黑体部分的匿名函数通过一元操作符变成了函数表达式,因而可以通过 () 来调用。

因此,执行匿名函数可以通过+,-,!,() 这样的形式来转化为函数表达式,就可以通过()来运行了。

匿名函数的好处在于:可以减少局部变量,以免污染现有的运行环境。jQuery等库都用到了这样的原理。
另外:通过+,-,!这三个符号运行的匿名函数比()运行的匿名函数可以减少一个字符的使用。
所以那些匿名函数附近使用括号或一些一元运算符的惯用法,就是来引导解析器,指明运算符附近是一个表达式。
按照这个理解,可以举出五类,超过十几种的让匿名函数表达式立即调用的写法
( 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() {}();
// ...
本文到此结束!

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值