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
    
    
  • 相关阅读:
    PetaPoco 使用总结(一)
    sql查询语句时怎么把几个字段拼接成一个字段
    js传入和传出参数乱码
    js事件
    耳机没有声音
    JQuery $未定义
    SQL Server导入导出不丢主键和视图的方法
    Transact-SQL解析和基本的实用语句
    数据库索引原理
    Web Service基本概念
  • 原文地址:https://www.cnblogs.com/zhaozhipeng/p/8080663.html
Copyright © 2011-2022 走看看