函数的概念
- 就是封装了一段可被重复调用执行的代码块,通过此代码可以实现大量代码的重复利用
函数的使用
- 有两步:
- 声明函数
- function 声明函数的关键字
- 函数是做某件事,所以函数名一般是动词
- 函数不调用,自己不执行
- 调用函数
- 千万不要忘了小括号
- 声明函数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script>
// 1. 声明函数
/* function 函数名() {
函数体;
}
*/
function sayHy() {
console.log("你好!");
}
// 2. 调用函数
/*
函数名();
*/
sayHy();
</script>
</head>
<body>
</body>
</html>
函数的封装
- 函数的封装是把一个或者多个功能通过函数的方式封住起来,对外之提供一个简单的函数接口
函数的参数
形参和实参
-
形参是接受实参的
-
函数的参数可以有,也可以没有个数不限
-
作用:在函数内部某些值不能固定,我们可以通过参数在调用函数时传递不同的值进去
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script>
// 1. 可以利用函数的参数实现函数重复不同的代码
/*function 函数名(形参1,形参2...) {
}
*/
/*函数名(实参1,实参2...);*/
// 2. 形参和实参的执行过程
function cook(aru) {
console.log('我要吃' + aru);
}
cook('西红柿炒鸡蛋');
</script>
</head>
<body>
</body>
</html>
函数形参和实参个数不匹配问题
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script>
function getSum(nums1,nums2) {
console.log(nums1 + nums2);
}
// 1. 如果实参的个数和形参的个数一致,则正常输出结果
getSum(1,2);
// 2. 如果实参的个数多于形参的个数,会取到形参的个数
getSum(1,2,3);
// 3. 如果实参的个数多于形参的个数,多余的形参定义为undefined,得到NaN
getSum(1);
</script>
</head>
<body>
</body>
</html>
- 注意:在JavaScript中,形参的默认值是 undefined
函数的返回值(return语句)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script>
// 1. 函数的返回值格式
/*function 函数名() {
return 需要返回的结果;
}
函数名();
*/
// 2. 代码体验
function getResult() {
return 666;
}
getResult();
console.log(getResult());
</script>
</head>
<body>
</body>
</html>
return 终止函数
-
return 之后的代码不被执行
// 1. return 终止函数 function getSum(num1,num2) { return num1 + num2; alert('我不执行了'); } console.log(getSum(43,13));
-
return 只能返回一个值。如果用逗号隔开多个值,以最后一个为准
// 2. return 只能返回一个值 function fn(num1,num2) { return num1,num2; } console.log(fn(1,2)); // 3. 我们求任意两个数的 加减乘除 结果 function getResult(num1,num2) { return [num1+num2,num1-num2,num1*num2,num1/num2]; } console.log(getResult(2,4));
-
函数没有 return,返回undefined
-
break,continue,return 的区别
- break:结束当前的循环体
- continue:跳出本次循环,继续执行下次循环
- return:不仅可以退出循环,还能够返回return语句中的值。同时还可以结束当前的函数体内的代码
arguments的使用
-
那我们不确定有多少个参数传递的时候,可以用 arguments 来获取。在 JavaScript 中,arguments 实际上它是当前函数的一个内置对象。所以函数都内置了一个 arguments 对象,arguments 对象中存储了传递的所有实参
-
arguments展示形式是一个伪数组,因此可以进行遍历。伪数组并不是真正意义上的数组。
-
伪数组具有以下特点:
- 具有 length 属性
- 按索引方式储存数据
- 不具有数组的 push,pop 的方法
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script>
// arguments 的使用
function fn() {
console.log(arguments); // 里面存储了所有传递过来的实参
console.log(arguments.length);
}
fn(1, 2, 3);
</script>
</head>
<body>
</body>
</html>
函数可以调用另一个函数
- 因为每个函数都是独立的代码块,用于完成特殊任务,因此经常会用到函数相互调用的情况
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script>
function fn1() {
console.log(22);
fn2();
}
fn1();
function fn2() {
console.log(33);
}
</script>
</head>
<body>
</body>
</html>
函数的声明方式
-
利用函数关键字自定义函数
function fn() { } fn();
-
函数表达式(匿名函数)
var 变量名 = function() { }
注意:
- fun 是变量名,不是函数名
- 函数表达式的声明方式跟声明变量差不多,只不过变量里面存的是值。而函数表达式里面存的是函数
- 函数表达式也可以进行传递参数