函数
函数表达式就是忽略名字:
1⃣️ 函数声明: function onName () {};
2⃣️ 命名函数表达式: var test = function abc () {};
3⃣️ 匿名函数表达式: var demo = function () {};
因为匿名函数表达式比较常用,所以说函数表达式一般是指匿名函数表达式;
参数
形式参数:没有实际传值;
实际参数:实际传的值;
不定参数数量:行参可以多个,实参就一个,反之亦然;
函数传参就相当于在函数里面声明几个变量;
函数有一个隐式的方法“arguments"系统自创的,有数组有长度就可以循遍历;
注:如果实参和行参数量不相同是不会有映射的;(行参和实参不对应上就不会有映射)
如果行参多余的参数赋值就只能当变量用,和实参不产生映射(只有实参和行参相等才会产生映射)
返回值
return:终止函数;
return本意就是降至返回到函数外;
递归
递归的优点:好找规律,找出口;
如果递归不找规律就是无限死循环,找出口找已知条件;
实例:
阶乘:0的阶乘为1
递归的典型案例:阶乘、斐波那契数列;
1、用递归求斐波那契数列
找出口
n == 1 || n == 2
找规律
fb(n) == fb( n-1 ) + fb( n - 2 )
function fb( n ) {
if( n == 1 || n == 2 ){
return 1;
}
return fb( n-1 ) + fb( n-2 );
}
fb(5) == fb(4)+fb(3);
fb(4) == fb(3)+fb(2);
fb(3) == fb(2)+fb(1);
2、用递归求n的阶乘
找规律 n! = n*(n-1)!
function mul(10) {
if ( n==1 || n==0) {
return 1;
}
return 10 * mul(10-1)!
}
阶乘导图:
return 5 * fn(5-1)
return (5-1) * fn(5-2)
return (5-2) * fn(5-3)
return (5-3) * fn(5-4)
return 1
先执行的最后被执行完