目录
一、什么是函数?
函数:一段代码的封装。函数也是一种值
函数的作用:能够在任意地方重复执行某些代码,提高代码的复用性。
1、语法
function 函数名 () { 函数体 }
注意:函数在定义完之后并不会执行,只有等调用的时候才会开始执行。
2、调用函数
语法:
函数名();
函数后面加小括号称为调用(执行函数里面的代码)。
例:定义一个函数,只要一调用就输出‘我爱你’
代码:
function sayLove () {
alert('我爱你');
}
sayLove();//调用sayLove函数输出‘我爱你’三个字
效果:
二、函数的参数
1、形式参数(形参)
定义函数中的参数,形式参数指的是,形式上有这个值,但是没有具体的数据,具体的值需要在调用函数的时候由实参传入。
2、实际参数(实参)
调用函数中的参数,具体的数据,实参会把具体数据传递给形参。
3、参数传递
参数传递遵循一一对应原则,也就是说实参会逐一传递给形参。
例如有如下函数:
function getSum(n, m) {
let sum = n + m;
console.log(sum);
}
当进行调用的时候会输入实参
getSum(1,2);
此时,实参时1,2;形参是n,m。根据一一对应原则,1会被传递给n,2会传递给m进行运算。
例:定义一个具有两个参数的函数,调用该函数,会打印这两个参数的和
代码:
function getSum(n, m) {
let sum = n + m;
console.log(sum);
}
getSum(1,2);//调用getSum函数求1加2的和
效果:
分析:
定义完函数后并不会执行,等调用的时候才会执行。该函数有两个形参,n和m;当调用时输入了实参,实参将值对应传递给形参,1传递给了n,2传递给了m。
4、为形参设置默认值
问题:当实参缺少会发生什么?
当实参缺少的时候,会传递undefined。
例如调用的时候写:
getSum(,2);
可以看到,与形参n对应的位置并没有值,此时n将会得到undefined。
当n没有得到正确的值的时候,我们的函数就可能会出bug,因此,我们可以为函数的形参设置默认值。
默认值设置方法一:
function getSum(n, m) {
n = n || 0;//为n设置默认值为0
m = m || 0;//为m设置默认值为0
let sum = n + m;
console.log(sum);
}
原理:当没有值传递给形参的时候,形参的值是undefined,在逻辑或的判断中,undefined会转换为false,由于短路操作,逻辑或会把0拿来直接赋给n。
默认值设置方法二:
function getSum(n=0, m=0) {//为形参设置默认值
let sum = n + m;
console.log(sum);
}
这种方法通俗易懂。
三、函数的返回值
return 值:返回值,这个值会返回到调用的位置。
返回值的三个注意点:
return会跳出函数
return后面可以不写值,会吧undeifned返回
函数内如果不写return,那么函数再执行完成所有代码之后也会返回undefined
一个函数内部只能有1个return
例:求任意数组中的最大值并返回这个最大值
代码:
function getMax ( arr ) {
// 先定义变量
let sum = 0;
for ( let i = 0; i < arr.length; i++ ) {
if ( sum < arr[i] ) sum = arr[i]
}
// 当循环结束之后就会得到sum,我们返回sum即可
return sum;
}
let ary = [23, 66, 331, 6, 7];
let re = getMax( ary );
console.log( re );
效果:
四、匿名函数和具名函数
1、具名函数
定义:function fn () {}
调用:fn();
2、匿名函数
匿名函数相比于具名函数,在function之后并没有设置函数名,那匿名函数该怎样去使用呢?
一种是用函数表达式的形式,将函数作为值赋给变量,当需要使用函数的时候,使用函数名来进行调用即可。
另一种是自调用函数(自执行函数),即定义完立即执行
function () {}//匿名函数的一般形式
函数表达式:
//函数表达式的定义
let fun = function (形参) {函数体};//将一个没有名字的函数当作值赋给变量。
//函数表达式的调用
fun(实参)//用变量名调用即可()中加实参
自执行函数:
;(function () {}());
;(function () {})();
自执行函数使用()括起来,前边的;是预防与上一句代码相连导致报错。