zoukankan      html  css  js  c++  java
  • js函数实现递归自调用的方法

    js函数的递归调用方法

    1.通过函数自身名字递归调用

    function sum(num){
      if(num<=1){
        return 1;
      }else{
        return num+sum(num-1);
      }
    }
    
    console.log(sum(5));//15

    这种通过函数名字调用自身的方式存在一个问题:函数的名字是一个指向函数对象的指针,如果我们把函数的名字与函数对象本身的指向关系断开,这种方式运行时将出现错误。

    2.通过arguments.callee调用函数自身

    function sum(num){
      if(num<=1){
        return 1;
      }else{
        return num+arguments.callee(num-1);
      }
    }
    console.log(sum(5));//15
    
    var sumAnother=sum;
    console.log(sumAnother(5));//15
    
    sum=null;
    console.log(sumAnother(5));//15

    这种方式很好的解决了函数名指向变更时导致递归调用时找不到自身的问题。但是这种方式也不是很完美,因为在严格模式下是禁止使用arguments.callee的。

    3.通过函数命名表达式来实现arguments.callee的效果。

    var sum=(function(){
        'use strict'
        return  function fun(num){
            if(num<=1){
                return 1;
            }else{
                return num+fun(num-1);
            }
        }
    })()
    
    console.log(sum(5));//15
    
    var sumAnother=sum;
    console.log(sumAnother(5));//15
    
    sum=null;
    console.log(sumAnother(5));//15
    
    
  • 相关阅读:
    The password has to have a minimum of 6 characters, including at least 1 small letter, 1 uppercase letter and 1 number
    Angular i18n的技术分享、踩过的坑
    转: .Net 4.0 ExpandoObject 使用
    min_square
    KALMAN PYTHON
    双系统安装 win + ubuntu
    docker
    drl
    shell
    导航定位方案
  • 原文地址:https://www.cnblogs.com/zhaozhipeng/p/8080663.html
Copyright © 2011-2022 走看看