JS自定义函数(递归、回调、匿名函数)

[b][size=x-large]JS自定义函数[/size][/b]
[size=large][b]1.递归[/b][/size]
[*]说明:递归表示函数自己调用自己,分两种方式:直接、间接调用
[*]注意:需保证递归能够正常结束,否则进入死循环
[*]示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JS自定义函数</title>
<script type="text/javascript">
var a=0,b=0;
// 直接调用
function test1(){
console.debug(a);
if(++a<5){
test1();
}
}
// 间接调用
function test2(){
console.debug("this is test2 b="+b);
if(++b<5){
test3();
}
}
function test3(){
console.debug("this is test3");
test2();
}
</script>
</head>
<body>
<input type="button" value="test1" onclick="test1()">
<input type="button" value="test2" onclick="test2()">
</body>
</html>

先后分别电机test1、test2按钮,后台运行结果:
[img]http://dl2.iteye.com/upload/attachment/0117/9547/a53558c1-fc87-376f-b030-8bf10040b734.png[/img]
[size=large][color=red]经典案例:汉诺塔[/color][/size]
// 汉诺塔
var n=3;
function hanoi(n){
// 将n个盘子从A柱借助B柱移动到C柱
move(n,'A','B','C');
}
function move(n,from,middle,to){
if(n==1){//如果只有一个盘子就直接移动到目标柱
console.debug(n+":"+from+"-->"+to);
}
else{
// 先将n-1个盘子从起始柱借助目标柱移动到中间柱
move(n-1,from,to,middle);
// 再将最后一个盘子从起始柱移到目标柱
console.debug(n+":"+from+"-->"+to);
// 最后将n-1个盘子从中间柱借助起始柱移到目标柱
move(n-1,middle,from,to);
}
}

演示结果:
[img]http://dl2.iteye.com/upload/attachment/0117/9549/a5e3b82c-f6ab-378b-80ea-90257055a0dd.png[/img]
[list]
[*]补充:能够使用循环的尽量使用循环解决问题
[/list]
[size=large][b]2.回调[/b][/size]
[*]不立即执行的函数调用,满足一定条件时执行或由别的代码调用执行,只有函数名,没有括号“()”和参数
[*]用途:用于[color=orange]事件绑定[/color]或者[color=orange]函数参数[/color]
[*]事件绑定:常见的有window.οnlοad=test();表示页面加载完成后执行函数test
[*]函数参数:可观察定时器(setTimeout/setInterval)的用法
[*]函数参数举例:
<script type="text/javascript">
function getMax(a,b){
return a>b?a:b;
}
function test1(){
doCompare(3,7,getMax);
}
function doCompare(a,b,compare){
var ret=compare(a,b);
console.debug(a+"、"+b+"中最大值为:"+ret);
}
</script>
后台运行结果:
[img]http://dl2.iteye.com/upload/attachment/0117/9569/2028ab02-356e-39d3-ad6f-07ed096a1885.png[/img]
[size=large][b]3.匿名函数[/b][/size]
[list]
[*]没有函数名的函数;一般用于回调,也可能用于一次性执行的函数,执行完成后自动销毁,节省空间。
[/list]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值