JS自定义函数
1.递归说明:递归表示函数自己调用自己,分两种方式:直接、间接调用注意:需保证递归能够正常结束,否则进入死循环示例:
JS自定义函数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();
}
先后分别电机test1、test2按钮,后台运行结果:
经典案例:汉诺塔
// 汉诺塔
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);
}
}
演示结果:
2.回调不立即执行的函数调用,满足一定条件时执行或由别的代码调用执行,只有函数名,没有括号“()”和参数用途:用于事件绑定或者函数参数事件绑定:常见的有window.οnlοad=test();表示页面加载完成后执行函数test函数参数:可观察定时器(setTimeout/setInterval)的用法函数参数举例:
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);
}
后台运行结果:
3.匿名函数
没有函数名的函数;一般用于回调,也可能用于一次性执行的函数,执行完成后自动销毁,节省空间。