JavaScript基础(六)回调函数与递归函数

直接进入正题,简单的说说JavaScript的回调函数与递归函数。 函数

一、回调函数  spa

    所谓的回调函数就是指将一个函数的指针(地址),也就是JavaScript中函数的函数名(JavaScript没有像C那样的指针)做为参数传递给另外一个函数,当在调用这个参数时,就是调用这个参数指向的函数,这就是回调函数。我就用生活中的一个例子来反映个人理解:在商场中有寄放物品的小柜子,我将其中一个小柜子的编号(前提是小柜子没锁)给你,你在作某件事的时候须要用小柜子里的东西,你再根据编号去取出来使用。JavaScript中回调函数通常在特定的事件触发后再调用,用来处理这个事件。意思就是本身定义的函数可是由他人去调用执行。 指针

再来讲说回调函数的传递方法:          递归

首先最容易看懂的方法是:
先定义一个函数fun1
function fun1(num1,num2){   
    alert(num1+num2);
}
再定义一个函数fun2
function fun2(num1,num2,fun){ 
    fun(num1,num2);   
}
最后调用函数fun2
fun2(3,5,fun1); 事件

上面的输出结果为8,具体执行顺序是,首先fun2(3,5,fun1);调用fun2函数,并传递三个参数,而函数fun1就被做为参数传递给了函数fun2,接下来继续在fun2的函数体内调用了fun,即被做为参数传递过去的fun1函数,输出结果为8。 ip

接下来是一种匿名方式传递函数: 回调函数

即不用先定义函数,直接在参数传递的时候定义函数
首先也是定义一个函数fun2
function fun2(num1,num2,fun){
  fun(num1,num2);
}
在这里咱们没有和上面同样定义函数fun1了,而是直接将定义和调用函数fun2放在了一块儿,将函数体传递给fun2
fun2(3,5,function(num1,num2){
 alert(num1+num2);
}); it

上面的输出结果同样为8,只是此次不是将函数名传递过去,二是直接将函数体做为参数传递给函数fun2。 io

上面两种方法继续用商场储物柜来解释:第一种方法比如我只将小柜子的号码告诉了你,你要用里面的东西还要本身去取,而第二种方法则是我直接将小柜子里面的东西给你,你不用再亲自到小柜子里面去取。固然这只是我为了记住上面两种方法的区别而作的比喻,在计算机执行并时 我也不知道是否是这样。 function

还有一种方法就是定义的同时也在调用:

(function fun2(num1,num2,fun){
   fun(num1,num2);
})(3,5,function(num1,num2){
                      alert(num1+num2);   
});

上面的结果一样为8,我在fun2函数外面打上括号表示当即执行,上面的方法其实就是下面这种形式的简写

function fun2(num1,num2,fun){    
           fun(num1,num2);
}
fun2(3,5,function(num1,num2){        
             alert(num1+num2);
});

 

递归函数:

在函数内部直接或间接的调用本身。

先来一段简单的代码

function num(num1){
    if(num1>1){ 
       num(--num1);
    
    document.write(num1)
}
num(4);

上面最终的输出结果是1123,为何会是1123呢,这就要说道堆栈的原理,先进后出,上述条件每成立一次,就进行一次,因为是--num,因此一次压栈是321,最后num1=1时条件不成立,因此就直接压入1,最后出栈后进先出,因此是1123。

再来一个求阶乘的例子,5的阶乘5!=5*4*3*2*1,咱们能够写成
5!=5*4!
4!=4*3!
3!=3*2!
2!=2*1!
1!=1
那么就能够用递归的方式来实现

 

function factorial(num) {
   if(num==1){
     return num;
   }else{
     return num*factorial(--num)
   }
}
alert(factorial(5));
结果为120,咱们来看看具体的执行过程:首先进入函数体后判断条件,不成立,返回调用本身自己的结果,而且在调用以前自减1,当num==1条件不成立时,函数就会一直返回调用本身自己,直到num==1条件成立时,返回1,再依次往外层返回结果,最后造成:
5!=5*4!
4!=4*3!
3!=3*2!
2!=2*1!
1!=1
的类型,最终输出120。

最后JavaSript的回调函数和递归函数并非这么简单,这只是一个简单的介绍,要运用好回调和递归还须要往后勤加练习。

相关文章
相关标签/搜索