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

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

  • 相关阅读:
    Navicat for Mysql安装及破解教程
    如何down掉IB交换机口
    pycharm替换文件中所有相同字段方法
    NAS、SAN、ISCSI存储
    Linux系统下安装rz/sz命令及使用说明
    python 实现查找某个字符在字符串中出现次数,并以字典形式输出
    python class用法
    zookeeper
    机器学习基础
    hive--数据仓库
  • 原文地址:https://www.cnblogs.com/MR-LIUB/p/3464522.html
Copyright © 2011-2022 走看看