function func(){
var arr=[1,1];
return function(n){
var temp=arr[n];
if(temp){
return temp;
}else{
temp=arguments.callee(n-1)+arguments.callee(n-1);
arr[arr.length]=temp;
return temp;
}
}
}
var func1=func();
var num=func1(10);
代码解析:
首先调用函数[var func1=func();]会执行第一个函数体,
然后return给func1,在调用return之后的函数体[var num=func1(10);],
执行return之后的函数,n=10;
先将arr数据中的数据赋值给temp,当temp中的值为1的之后,temp为true,
否则执行下面的arguments.callee(n-1)+arguments.callee(n-2);
这就相当于一个函数回调体,因为arguments.callee本身就是当前函数体内部的一个对象.
首先先分析arguments.callee(n-1),
当再次执行函数体时,n 的值会等于n-1,直到n的值为1的时候,temp为true,然后return temp,然后再将arr[arr.length]中的值依次的循环出来,直到arr.length中的值 为10的时候,最后输出结果.
以上为代码调试结果,语言表达可能尚不明确,有兴趣的话,可以将代码进行调试,然后结合看一下,收益就会颇多.