javascript--函数(二)
一、函数的重载
在调用函数的时候,传入的参数的个数与类型不同,执行不同的代码块。
函数重载的模拟
function chongzai(){ if(arguments.length==1){ if(typeof arguments[0]=='number'){ alert('这是第一种形式') }else if (typeof arguments[0]=='string'){ alert('这是第二种形式') } }else if(arguments.length==2){ if(typeof arguments[0]=='number'&& typeof arguments[1]=='number'){ alert('这是第三种形式') }else if (typeof arguments[0]=='string'&& typeof arguments[1]=='string'){ alert('这是第四种形式') } } } chongzai(1); chongzai('a'); chongzai(1,1); chongzai('a','a')
二、回调函数
通过函数的指针来调用函数
——把一个函数的指针作为另一个函数的参数,当调用这个参数的时候,这个函数就叫做回调函数。
练习:算数运算,以回调函数的方式进行不同的运算
//将不同的运算类型当成参数传递给函数result,提高代码的运行效率 function result(num1,num2,type){ console.log(type(num1,num2)) } function jia(a,b){ return a+b; } function jian(a,b){ return a-b; } function cheng(a,b){ return a*b; } function chu(a,b){ return a/b; } result(6,2,jia) result(6,2,jian) result(6,2,cheng) result(6,2,chu)
三、函数的递归
在函数内部直接或间接的调用自己
练习:1.斐波那契数列
// 斐波那契数列 1 1 2 3 5 8 13 21 值为前两个数的值之和 function feibo(n){ if(n==1||n==2){ return 1; }else{ return feibo(n-1)+feibo(n-2); } } alert(feibo(8))
2.计算1+2+3+4+...
function fn(num){ if(num==1){ return 1; }else{ return num+fn(num-1) } } var num=fn(5) console.log(num) //解析 //在第一次运行结果 5+fn(4) //第二次运行结果 5+4+fn(3) //第三次运行 5+4+3+fn(2) //第四次运行 5+4+3+2+fn(1) //第五次运行 5+4+3+2+1
四、练习:做出如下效果图,并封装成函数,传入参数可形成任意行的效果图
function star(num) { for(var i=1;i<=num;i++){ for(var j=num;j>=i;j--){ document.write(" ") } for(var h=1;h<=i;h++){ document.write(" *") } document.write('</br>') } } star(10)