JS中自动执行函数小结

JS中自动执行函数小结

请看以下两个函数:

1.function a(){
2.   
alert("a")
3.}

1.var b= function(){
2.   
alert("b")
3.}
它们俩有何不同呢?翻开书,作者会告诉我们,前者为函数声明,后者为函数表达式。函数声明作为一种声明,当然会在预编译阶级有所动作(声明提前),而函数表达式则不会。另一个区别是,函数声明是语句,语句是没有返回值,不能直接加一对括号让它们执行。

1.function a (){
2. 
alert("a")
3.}();//报错

1.var b = function(){
2. 
alert("b")
3.}();
给 function 外套一对括号就不报错了,括号是表达式,是表达式就有返回值,所以可以在后面加一对括号让它们执行,再看

1.(function a (){
2. 
alert("a")
3.})();//没有问题
      (function a (){
        alert("a")
      })();//没有问题
 
运行代码

另外,我们知道,函数名的作用就是用来引用的,现在没用了,我们是不是可以把它去掉呢?

1.(function (){
2. 
alert(arguments.callee)
3.})();//弹出自身
      (function (){
        alert(arguments.callee)
      })();//弹出自身
 
运行代码

知道这个,我们就可以方便地递归自身了。如弄一个深拷贝函数

01.var deepExtend = function(destination, source) {
02. 
for (var property in source) {
03.   
if (source[property] && source[property].constructor &&
04.    
source[property].constructor === Object) {
05.     
destination[property] = destination[property] || {};
06.     
arguments.callee(destination[property], source[property]);
07.   
} else {
08.     
destination[property] = source[property];
09.   
}
10. 
}
11. 
return destination;
12.};
另外,从另一方便也启法了我们如何兼价地批量生产各种各样的自动执行函数。因为把函数转换为表达式的方法并一定要靠括号这个操作符,我们还可以用void操作符,~操作符,!操作符……

1.void function(){
2. 
alert("飞鸽传书");
3.}()

1.0, function(){
2. 
alert("飞鸽传书");
3.}();1.-function(){
2. 
alert("飞鸽传书");
3.}();1.+function(){
2. 
alert("飞鸽传书");
3.}();1.!function(){
2. 
alert("飞鸽传书");
3.}();1.~function(){
2. 
alert("飞鸽传书");
3.}();1.typeof function(){
2. 
alert("飞鸽传书");
3.}();

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值