方法嵌套实际是要实现一种循环,是循环就有两个要素:一个是终止条件,一个是增量。
嵌套函数和普通函数有一点不同:
既然是嵌套函数,就是把自身当作值运用到函数体内。这就要求函数必须有一个返回值。就要用return语句。
function a(x){
if(x<=1)
return 1
else
return x*a(x-1)
}
//上述示例是一个嵌套函数,来确定一下循环要素:if(x<=1) return 1这是终止条件,当x<=1时终止,else return x*a(x-1)这是增量,每次嵌套调用函数a()时参数都会减1
function a(x){
if(x<=1)
return 1
else{
var m=1
for(var i=2i<=xi++){
m*=i
}
return m
}
}
//上述示例嵌套函数就是要实现这样的循环
functionoutter(){//在outter中定义一个内嵌函数,innerfunctioninner(){alert('innerfunctioncall.')}returninner//返回内嵌的函数。//innerisoutofscope.}functionfollow(){varinner=outter()//在follow中调用outter,获取inner函数的引用。inner()//执行,我可以执行作用域外的函数了!}上面是举个简单的例子,来说明函数声明的作用域。上面的outter函数中,方法执行结束之后,inner函数的上下文已经销毁了。正常情况下,内部函数也会随着销毁。但是由于我们返回了inner函数的引用,并且在follow函数中成功赋值。因此inner函数虽然已经处于作用域外了,但是由于仍然有一个引用,所以它还是可以继续被执行。但是follow函数结束以后,follow的上下文也销毁了,并且这次,inner函数再也没有机会逃离被销毁的命运了。因此所谓函数嵌套的问题,就是作用域+引用的问题。只要搞明白了这个就可以了。