Javascript 中的回调函数和递归函数简单实际分析学习
1 回调函数
所谓回调函数简单理解就是将一个函数做为参数传递给其他的函数供其使用。(只是在js中,因为其它的语言中有指针这个概念)。
举一个简单的例子,当我们在统计账单的时候就要整理材料这些,然后就需要计算器,计算器我们想象成为一个可以实现计算的函数。统计账单是另外的另一个函数,当统计账单的时候就会需要计算器这个函数的支持,其实这就是一个简单的回调。可以按这个理解。
下来我借用网上的一个例子:
//先定义一个函数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 三个参数 传入的时候就会触发fun1的函数 以fun在fun2中运行, num1 和num2 为传入的 3 5 最后输出他们的和 8
回调中还有一种匿名的回调
Function fun2 (num1,num2,fun) { Fun(num1,num2); } Fun2 (3,5,function (num1,num2){ alert (num1+num2);});
简单而言就是将原本在上面提前定义的函数在调用的时候才调用。
另外的一种写法就是:
(function fun2(num1,num2,fun) { fun(num1,num2); }) (3,5,function(num1,num2) { alert(num1+num2); });
加括号意为直接就执行。
递归函数:
递归函数一句话就是:在函数内部直接或间接的调用自己。
了解递归函数之前需要对堆栈的概念有一定的了解。
堆栈:有一句歇后语叫做砌墙的砖头后来居上。先放下的东西最后拿出来。
设想有一个直径不大、一端开口一端封闭的竹筒。有若干个写有编号的小球,小球的直径比竹筒的直径略小。现在把不同编号的小球放到竹筒里面,可以发现一种规律:先放进去的小球只能后拿出来,反之,后放进去的小球能够先拿出来。所以“先进后出”就是这种结构的特点。
堆栈就是一种数据结构,他是在内存中开辟一个存储区域,数据一个一个顺序的存入(也就是压入push),有一个地址指针总指向最后一个压入堆栈的数据所在的数据单元,存放这个地址指针的寄存器就叫做堆栈指示器。开始放入的单元叫做“栈底”。数据一个一个存入的过程叫做压栈在压栈的过程中,每有一个数据压入堆栈,就放在和前一个单元相连的后面一个单元中,堆栈指示器中的地址自动加1。读取这些数据时,按照堆栈指示器中的地址读取数据,堆栈指示器中的地址数自动减 1。这个过程叫做“弹出pop”。如此就实现了后进先出的原则
堆栈是计算机中最常用的一种数据结构,比如函数的调用在计算机中是用堆栈实现的。
堆栈可以用数组存储,也可以用以后会介绍的链表存储。
此处只是做一个简单的理解。
下来理解递归函数:
Function num(num1) { If (num1>1) { Num(--num1); } Document.write(num1) } Num(4);
输出的结果是1123 ,当运行num函数的时候进入函数体进行判断,4>1成立,又执行自身的num函数,压栈3 ,因为是--num 先自减在使用,依次压栈为321,最后由于1不成立直接压入,最后出栈采用后进先出的规则,所以最后为1123。
这只是简单的js回调和递归介绍。
本文出自 “狂奔的小野马” 博客,请务必保留此出处http://chongge.blog.51cto.com/8894476/1752197
Javascript 中的回调函数和递归函数简单实际分析学习
原文地址:http://chongge.blog.51cto.com/8894476/1752197