zoukankan      html  css  js  c++  java
  • 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的时候,最后输出结果.

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

  • 相关阅读:
    Python if语句
    Pyhton数据类型总结
    Flask系列之自定义中间件
    Flask系列之蓝图中使用动态URL前缀
    python+Nginx+uWSGI使用说明
    python之threading.local
    python之偏函数
    Flask系列之源码分析(一)
    Python扩展之类的魔术方法
    Flask系列(十一)整合Flask中的目录结构(sqlalchemy-utils)
  • 原文地址:https://www.cnblogs.com/MR-LIUB/p/3464522.html
Copyright © 2011-2022 走看看