一、函数
函数定义:
- 函数声明
function f1(){ //TODO } f1(); //函数调用
- 函数表达式(函数表达式又称为匿名函数表达式)
var test = function(){ //TODO } text(); //函数调用
函数参数:
- 形参:形式参数。是在定义函数的时候使用的参数,目的是用来接收调用该函数时传入的参数。
function f1(parameter1,parameter2){ //parameter1和parameter2 就是形参 //形参在这里并不是一个实际的值,只是一个形式参数,类似于占位符,当这个函数被调用并传入参数时,形参才会有真正对应的实际值 }
- 实参:实际参数。是在调用函数时传入的参数,传入的实参会赋值给形参。
f1(10,20) //10,20就是实参 //调用函数传入实参后,f1中的形参 parameter1=10,parameter2=20
1.在JS中函数的参数有个特点就是,它是不定参数,也就是说它的参数的个数没有限制,而且在你定义形参和传入实参时个数也可以不同。
function f2(a,b){ console.log(a,b) } f2(1); // 1 undefined
2.arguments
是一个对应于传递给函数的参数的类数组对象。我们可以用来判断传入函数中的实参个数function f3(a,b,c,d){ var number = arguments.length; console.log(number); } f3(1,2); // 2
我们可以利用arguments和js的不定参数特性来实现:任意个数字相加的函数
function sum (){ var num = arguments.length; var result = 0; for (var i = 0; i < num;i++){ result += arguments[i]; } console.log(result); } sum(1,2,3,4,5,6,7,8,9,10); // 55 ,在这里你可以传入任意个参数 sum(1,1); //2 sum(100,200,1000) ; //1300
函数返回值:
- return 用来终止该函数的执行并返回一个值
function f4(a,b){ return a+b; } var c = f4(1,2); console.log(c); //3
二、递归
递归函数:就是在一个函数通过名字调用自身的情况下构成的
写递归要记住两点:1.找规律。2.找出口,如果没出口那么就是一个死循环的函数。
// 经典的递归阶乘函数 function factorial(n){ if (n<=1){ return 1; } return n * factorial(n-1); } //规律: 5! = 5 * 4 * 3 * 2 * 1 // n! = n * (n-1) //出口:0的阶乘为1,1的阶乘也为1,可以看出出口就是为1的情况
- 阶乘实现斐波那契数列
function fb(n){ if(n == 1 || n == 2){ return 1; } return fb(n-1)+fb(n-2); }
递归有个优点是可以使代码简洁,但是执行速度慢。