JavaScript回调函数和递归函数

来源:互联网 发布:绘制网络拓扑结构图 编辑:程序博客网 时间:2024/06/05 05:07

JavaScript回调函数:

把一个函数的指针作为另外一个函数的参数,当调用这个函数时,这个函数就叫做回调函数。(通过指针来调用)

function math(num1,num2,fun){          return fun(num1,num2);      }      alert(math(1,2,bb));      function bb(num1,num2){        return (num1+num2)*2-1;      }      /*alert(math(1,2,funtion(){        return (num1+num2)*2-1;      }));*/

bb函数这个指针传给了math函数中的参数fun,通过fun来调用

以上调用方式在有多个函数时很麻烦,故采用这种方式。

function math(num1,num2,fun){          return fun(num1,num2);      }alert(math(1,2,funtion(){        return (num1+num2)*2-1;      }));

JavaScript递归函数:

递归函数指在函数内部直接或者间接的调用自己

例如:

function aa(num1){        if(num1>1){          aa(--num1);        }        document.write(num1);      }      aa(4);//1123
分析:当aa(4)调用时,外部的num1为4,进入函数判断,num1--,弹出num1位3,当aa(3)调用时,外部的num1为3,进入函数判断,num1--,弹出num1位2,当aa(2)调用时,外部的num1为2,进入函数判断,num1--,弹出num1位1,当aa(1)调用时,外部的num1为1,条件不成立,弹出num1位1。。那么现在每个调用的值知道啦,为什么是1123呢?涉及到栈和堆的一些知识,由于栈存储过程叫压入栈,先进后出。aa(4)先入栈,aa(3),aa(2),aa(1)依次入栈,那么aa(1)在最顶层,由先进后出的顺序当然是aa(1)对应的值先出栈,依次类推,故结果为1123。

function aa(num1){        if(num1>1){          aa(--num1);        }        document.write(num1);      }      aa(4);//1123*/

在看递归函数的一个案例 --阶乘:

 function aa(num1){          if(num1 == 1){            return num1;          }else{            return num1*aa(--num1);          }      }      alert(aa(4));//4*3*2*1=24




0 0