Js_闭包中的Fibonacci数列

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的时候,最后输出结果.

    以上为代码调试结果,语言表达可能尚不明确,有兴趣的话,可以将代码进行调试,然后结合看一下,收益就会颇多.

posted @ 2013-12-09 00:14  Mr.liub  阅读(333)  评论(0编辑  收藏  举报