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

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

  • 相关阅读:
    Git衍合和合并区别
    Git开发流程
    AJAX用户注册演示程序
    PHP常用MySql操作
    轻描淡写
    浅谈web后门隐藏与检测思路
    PHP代码审计和漏洞挖掘的一点思考
    Android Split的用法
    Android 动态显示时间
    Java 获取字符长度
  • 原文地址:https://www.cnblogs.com/MR-LIUB/p/3464522.html
Copyright © 2011-2022 走看看