1. 函数的概念
封装一段可被重复调用的代码块
,通过此代码块可以实现大量代码的重复使用
2. 函数的使用
函数的使用分为:声明函数
和调用函数
2.1 函数的声明和调用
函数可以带参数也可以不带参数
// 声明函数
function 函数名() { // function是关键字小写,函数名命名为动词
//函数体代码
}
// 调用函数
函数名(); // 通过调用函数名来执行函数体代码 //不要忘记小括号
口诀:函数不调用,自己不执行
函数可以相互调用:
function fn1() {
console.log(111);
fn2();
console.log('fn1');
}
function fn2() {
console.log(222);
console.log('fn2');
}
fn1();
2.2 函数的封装
函数的封装是把一个或者多个功能通过函数的方式封装起来,对外只提供一个简单的函数接口
3.函数的参数
3.1 形参和实参
// 带参数的函数声明
function 函数名(形参1, 形参2 , 形参3...) { // 可以定义任意多的参数,用逗号分隔
// 函数体
}
// 带参数的函数调用
函数名(实参1, 实参2, 实参3...);
形参:声明函数时
,函数名后小括号内的参数
实参:调用函数时
,函数名后小括号内的参数
作用:在函数内部某些值不能固定,我们可以通过参数在调用函数时传递不同的值进去
3.2 函数参数的传递过程
- 调用的时候实参值是传递给形参的
- 形参简单理解为:不用声明的变量
- 实参和形参的多个参数之间用逗号(,)分隔
3.3 函数形参和实参个数不匹配的问题
function sum(num1, num2) {
console.log(num1 + num2);
}
sum(100, 200); // 形参和实参个数相等,输出正确结果
sum(100, 400, 500, 700); // 实参个数多于形参,只取到形参的个数
sum(200); // 实参个数少于形参,多的形参定义为undefined,结果为NaN
注意:在JavaScript中,形参的默认值是undefined。
4.函数的返回值
4.1 return 语句
使用 return 语句将函数值返回给调用者
// 声明函数
function 函数名(){
...
return 需要返回的值;
}
// 调用函数
函数名(); // 此时调用函数就可以得到函数体内return 后面的值
- 在使用 return 语句时,函数会停止执行,并返回指定的值
- 如果函数有return,返回return之后的值;如果函数没有 return ,返回的值是 undefined
- return 语句之后的代码不被执行
- return 只能返回一个值。如果用逗号隔开多个值,以
最后一个
为准。
4.2 break ,continue ,return 的区别
- break :结束当前的循环体(如 for、while)
- continue :跳出本次循环,继续执行下次循环(如 for、while)
- return :不仅可以退出循环,还能够返回 return 语句中的值,同时还可以结束当前的函数体内的代码
5.arguments的使用
arguments
对象中存储了传递的所有实参,它是当前函数的一个内置对象,是一个伪数组
- 具有 length 属性
- 按索引方式储存数据
- 不具有数组的 push , pop 等方法
function maxValue() {
var max = arguments[0];
for (var i = 0; i < arguments.length; i++) {
if (max < arguments[i]) {
max = arguments[i];
}
}
return max;
}
console.log(maxValue(2, 4, 5, 9));
console.log(maxValue(12, 4, 9));
6. 函数的两种声明方式
6.1自定义函数(命名函数)
利用函数关键字 function
自定义函数方式
调用函数的代码既可以放到声明函数的前面,也可以放在声明函数的后面
// 声明定义方式
function fn() {...}
// 调用
fn();
6.2 函数表达式方式(匿名函数)
利用函数表达式方式
// 这是函数表达式写法,匿名函数后面跟分号结束
var fn = function(){...};
// 调用的方式,函数调用必须写到函数体下面
fn();
- 因为函数没有名字,所以也被称为匿名函数
- 这个fn 里面存储的是一个函数,
fn是变量名
,不是函数名 - 函数表达式方式原理跟声明变量方式是一致的
- 函数表达式创建的函数可以通过“变量名()”来调用
- 函数调用的代码必须写到函数体后面