目标
- 能够说出为什么需要函数(让大量代码重复使用)
- 能够根据语法书写函数
- 能够根据需求封装函数
- 能够说出形参和实参的传递过程
- 能够使用函数的返回值
- 能够使用arguments获取函数的参数
能回答目标的问题就不用看这篇文章啦
目录
- 函数的概念
- 函数的使用
- 函数的参数
- 函数的返回值
- arguments的使用
- 函数案例
- 函数的两种声明方式
1. 函数的概念
函数就是封装了一段可以被重复执行调用的代码块
目的:就是让大量代码重复使用
2. 函数的使用
函数在使用时分为两步:声明函数和调用函数。
- function是声明函数的关键字,必须小写
- 由于函数一般是为了实现某个功能才定义的,所以通常我们将函数名命名为动词,比如 getSum
- 调用的时候千万不要忘记添加小括号
- 口诀∶函数不调用,自己不执行
// 声明函数
function hanshuming () {
//函数体代码
}
//调用函数
函数名();//通过调用函数名来执行函数体代码
2.3 函数的封装
- 函数的封装是把一个或者多个功能通过函数的方式封装起来,对外只提供一个简单的函数接口
- 简单理解︰封装类似于将电脑配件整合组装到机箱中(类似快递打包)
3. 函数的参数
3.1 函数的实参和形参
在声明函数时,可以在函数名称后面的小括号中添加一些参数,这些参数被称为形参,而在调用该函数时,同样也需要传递相应的参数,这些参数被称为实参。
参数 | 说明 |
---|---|
形参 | 形式上的参数函数定义的时候传递的参数当前并不知道是什么 |
实参 | 实际上的参数函数调用的时候传递的参数实参是传递给形参的 |
参数的作用:在函数内部某些值不能固定,我们可以通过参数在调用函数时传递不同的值进去。
注意点:
- 参数之间用逗号隔开
- 形参可以看做是不用声明的变量
3.3 函数形参实参不匹配问题
参数个数 | 说明 |
---|---|
实参个等于形参个数 | 输出正确结果 |
实参个数多于形参个数 | 只取到形参的个数 |
实参个数小于形参个数 | 多的形参定义为uhdefined,结果为NaN |
3.4 小结
- 函数可以带参数也可以不带参数
- 声明函数的时候,函数名括号里面的是形参,形参的默认值为undefined
- 调用函数的时候,函数名括号里面的是实参
- 多个参数中间用逗号分隔
- 形参的个数可以和实参个数不匹配,但是结果不可预计,我们尽量要匹配
4. 函数的返回值
4.1 return语句
判断两个数谁大的三元表达式
return num1>num2 ? num1 :num2;
- 终止函数
- 只能返回一个值 ,最后一个值
- 没有值会返回undefined
4.2 数组的最大数值
function getArrMax(arr) {
var max = arr[0];
for (var i=1;i<arr.length; i++){
if (arr[i] >max){
max = arr[i];
}
}
return max
}
var re = getArrMax([5,2,99,101,67,77]);
console.log(re);
在我们实际开发里面,我们经常用一个变量来接受函数的返回结果使用更简单
4.5 break,continue,return的区别
- break :结束当前的循环体(如for、while )
- continue :跳出本次循环,继续执行下次循环(如for、while )
- return :不仅可以退出循环,还能够返回return语句中的值,同时还可以结束当前的函数体内的代码
小作业
- 写一个函数,用户输入任意两个数字的任意算术运算(简单的计算器小功能),并能弹出运算后的结果.
- 写一个函数,用户输入任意两个数字的最大值,并能出弹运算后的结果。
- 写一个函数,用户输入任意三个不同数字的最大值,并能单出运算后的结果。
- 写一个函数,用户输入一个数判断是否是素数,并返弹出回值(又叫质数,只能被1和自身整数的数)
5. arguments的使用
当我们不确定有多少个参数传递的时候,可以用arguments来获取。 在JavaScript中,arguments实际上它是当前函数的一个内置对象。所有函数都内置了一个arguments对象,arguments对象中存储了传递的所有实参。
arguments展示形式是一个伪数组,因此可以进行遍历。伪数组具有以下特点∶
- 具有length属性
- 按索引方式储存数据
- 不具有数组的push , pop等方法
5.1 利用函数求任意个数的最大值
function getMax() {
var max = arguments[0];
for (var i=1 ; i< arguments.length ; i++) {
if (max <arguments[i]) {
max = arguments[i];
}
}
return max;
}
console.log(getMax(1,2,3));
6. 函数案例
6.1 利用函数封装方式,翻转任意一个数组
// 利用函数翻转任意数组
function reverse(arr) {
var newArr = [] ;
for (var i = arr.length - 1; i >= 0 ;i--) {
newArr[newArr.length] = arr[i];
}
return newArr
}
var arr1 = reverse([1,3,4,6,9]);
console.log(arr1);
6.2 利用函数封装的方式 ,冒泡排序。
// 利用函数冒泡排序sort
function sort(arr) {
for (var i = 0; i < arr.length - 1; i++) {
for (var j = 0; j < arr.length - i - 1; j++)
if (arr[j] > arr[j + 1]) {
var temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
return arr;
}
var arr1 = sort([1, 10, 8, 3]);
console.log(arr1);
6.3 函数可以调用函数
因为每个函数都是独立的代码块,用于完成特殊任务,因此经常会用到函数相互调用的情况。
6.4 判断二月有多少天
//用户输入年份,输出2月多少天
function backDay(){
var year = prompt('请输入年份');
if (isRunyear(year)){
alert('29');
} else {
alert('28');
}
}
backDay();
//判断是否是闰年
function isRunyear (year) {
var flag = false;
if (year % 4 == 0 && year %100 != 0 || year % 400 == 0){
flag = true;
}
return flag;
}
6.5 函数的两种申明方式
- 利用函数关键字自定义函数(命名函数)
function fn (){}
- 函数表达式(匿名函数)
var 变量名 = function() {}
- 函数表达式声明方式跟声明变量差不多,只不过变量里面存的是值,而函数表达式里面存的是函数
- 函数表达式也可以进行传递参数