JS中的函数-内部函数,子调用函数和返回值为函数的函数

自调用函数(Self-invoking Functions)

自调用函数也是匿名函数的一种表现形式,这个函数在定义之后,直接调用。如下

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

看起来还挺怪异,不过确实很简单。 
自调用函数很方便使用,可以不用定义更多的全局变量。还有个好处,就是这个函数不能被执行两遍。真是非常适合做初始化的工作。 
许多著名的javascript库特别多的源码中使用了这个功能,例如本人喜欢的Jquery.

内部函数(Inner Functions)

把函数作为一个值来思考一下,既然一个值可以定义在函数中,把函数做为数据放在函数中也未尝不可。如下: 
function a(param){  
function b(theinput){         
   return theinput *2;  
}  
return 'The result is '+b(param);  
}  
也可以这么写 
var a = function(param){  
     var b = function(theinput){  
        return theinput*2;  
     };  
     return 'The result is '+b(param);  
};  
b函数是在a函数之中的 ,也就是意味着,在a函数的外部是无法访问b函数的。所以也称之为私有函数(private function) 
a(2);  
a(8);  
b(2);  
发现b(2)是没有定义的。也就确定了它确实是私有函数。 
内部函数的是使用还是有很多好处的。 
1.可以有更少的全局变量。过多的使用全局变量就有可能由于命名冲突而产生过多的bugs 
2.私有性,可以设计更好的接口函数供外部访问。

返回值为函数的函数(Functions that Return Functions)

在前几篇文章已经介绍了函数要有返回值,即使没有写return,函数也会返回一个undefine。 
接下来看看返回值为函数的情况 
function a(){  
alert('a');  
return function(){  
  alert('b');  
};  
}  
在这个例子中,a函数执行了alert('a'),以及它返回了另一个函数b。关于返回b的调用我们可以这样来用。 
var newFunc = a();  
newFunc();  
执行结果为 alert a和alert b 
如果不想赋值调用这个函数也可以简写如下 
a()();  
函数的自身重写

因为函数可以返回一个函数,那就意味着可以用一个新的函数替代一个旧的函数,根据前一个例子来改进一下 
a=a();  
第一次运行函数a,就alert a,再次运行函数a,就alert b,这个功能对初始化非常有用。这个函数a重写了自己,避免在以后调用初始化的功能(上个例子为alert a)。 
当然我们还有更简单的方法来重写a函数那就是在a函数的内部重写它,来看看代码 
function a(){  
alert("a")  
a=function(){  
   alert("b");  
}  
}  
只有在初次调用a函数才会执行 alert a 在以后的调用中,都会执行alert b 
下面结合前几节看个综合的例子 
var c = function(){  
   function a(){  
    alert('a')  
   }  
   function b(){  
    alert('b')  
   }  
   a();  
   return b;  
}();//alert('a');  
c();//alert('b');  
这个例子有以下几点需要注意 
1. a函数,b函数是内部函数。 
2. return b 返回的是个函数的引用。 
3. 子调用函数重写了函数c。

如果能明白这个例子,关于内部函数,子调用函数和返回值为函数的函数就可以都理解了。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值