函数-1.

函数

目标

  • 为什么需要函数
  • 根据语法书写出函数
  • 根据需求封装函数
  • 说出形参和实参的传递过程
  • 能够使用函数的返回值
  • 能够使用arguments获取函数的参数

为什么要有函数

  • 为了让大量代码重复使用

函数function 概念

  • 函数(function),也叫作功能、方法,函数可以将一段代码一起封装起来,被封装起来的函数具备某一项特殊的功能,内部封装的一段代码作为一个完整的结构体,要执行就都执行,要不执行就都不执行。
  • 函数就是封装了一段可以被重复执行调用的代码块。
  • 函数的作用就是封装一段代码,将来可以重复使用。
// 计算1~100的和
// 声明函数
function getSum() {
    var sum = 0;
    for (var i = 1;i<=100;i++){
        sum += i;
    }
    console.log(sum);
}
// 调用函数
getSum();

函数声明

  • 函数声明又叫函数定义,函数必须先定义然后才能使用
  • 如果没有定义函数直接使用,会出现一个引用错误。
  • 函数名命名规则:可以使用字母、数字、下划线、$,但是数字不能用来开头。不能使用关键字和保留字。
  • 特点:函数声明的时候,函数体并不会执行,只有当函数被调用的时候才会执行
  • 函数声明语法:
function/* 函数声明的关键字 */ 函数名(){
    封装的结构体;//函数体
}//这种声明方式的函数叫命名函数
function fun() {
    console.log(1);
    console.log(2);
    console.log(3);
    console.log(4);
}

函数调用

  • 调用方法:函数名();
    fun();
  • 函数调用也叫作函数执行,调用时会将函数内部封装的所有的结构体的代码立即执行。
  • 函数内部语句执行的位置,与函数定义的位置无关,与函数调用位置有关。
  • 函数可以一次定义,多次执行。

函数的参数

  • 我们希望函数执行结果不是一成不变的,可以根据自定义的内容发生一些变化。
  • 函数预留了一个接口,专门用于让用户自定义内容,使函数发生一些执行效果变化。
  • 接口:就是函数的参数,函数参数的本质就是变量,可以接收任意类型的数据,函数执行结果根据参数不同,结果也不同。
  • 一个函数可以不设置参数或者设置多个参数,参数之间用逗号分隔

案例一 求两个数的和

function getSum(num1,num2){
    console.log(num1+num2);
}
// 调用函数时,给小括号内部添加数据
getSum(1,2);

案例二 求两个数之间的和

function getSum(num1,num2) {
    var sum = 0;
    for (var i = num1; i <= num2; i++) {
        sum += i;
    }
    console.log(sum);
}
getSum(1,3);

形参和实参

  • 函数的参数根据书写位置不同,名称也不同:
  • 形式参数:定义函数的 () 内部的参数,叫做形式参数,本质是变量,可以接收实际参数传递过来的数据。简称形参。
  • 实际参数:调用函数的 () 内部的参数,叫做实际参数,本质就是传递的各种类型的数据,传递给每个形参,简称实参。
  • 函数执行过程,伴随着传参的过程:
// 2.形参接收到实参传来的数据,相当于给形参变量隐形的赋值。
function sum(形参1, 形参2) {
    // 3.在参与程序时,结构体中用的就是形参接收到的实参数据,整个过程就是传参过程。
    console.log(形参1 + 形参2);
}
// 1.函数调用时,会将实参传递到形参的位置
sum(实参1,实参2);
  • 如果实参个数多于形参个数,则会从前往后取形参个数的实参。
  • 如果实参少于形参,那么对应不上的形参,结果就是undefined(因为形参可以看成是不用声明的变量,变量没有接收值就是undefined)。此时getSum(1);的结果是NaN(因为任何一个数字型的加上undefined结果都是NaN)

函数的参数优点

  • 不论使用自己封装的函数,还是其他人封装的函数,只需要知道传递什么参数,执行什么功能,没必要知道内部的结构什么。
  • 一般自己封装的函数或者其他人封装的函数需要有一个 API 接口说明,告诉用户参数需要传递什么类型的数据,实现什么功能。
// 参数:传两个参数,数据类型为数字
// 功能:得到两个数字之和
function sum(a, b) {
    console.log(a + b);
}
sum(3,4);

函数的返回值

  • 函数能够通过参数接收数据,也能够将函数执行结果返回一个值。
  • 利用函数内部的一个 return 的关键字设置函数的返回值。
  • 作用 ①:函数内部如果结构体执行到一个 return 的关键字,会立即停止后面代码的执行
  • 作用 ②:可以在 return 关键字后面添加空格,空格后面任意定义一个数据字面量或者表达式,函数在执行完自身功能之后,整体会被 return 矮化成一个表达式,表达式必须求出一个值继续可以参与程序,表达式的值就是 return 后面的数据。
 function sum(a, b) {
    return a + b;//函数遇到return,把a+b的值返回给函数调用者
}
sum(a+b);//相当于sum(a+b)=a+b

函数的返回值应用

  • 函数如果有返回值,执行结果可以当成普通数据参与程序。
    var num = sum(3, 4);
  • 函数如果有返回值,可以作为一个普通数据赋值给一个变量,甚至赋值给其他函数的实际参数。
    var num = sum(3, sum(3, 4));
  • 注意:如果函数没有设置 return 语句 ,那么函数也有默认的返回值 undefined;如果函数使用了return 语句,但是 return 后面没有任何值,那么函数的返回值也是 undefined。
  • 注意:return 只能够返回一个值。如果后面有两个值(两个值之间用逗号隔开),返回的结果是最后一个值。如果想返回多个值,可以将多个数值放在一个数组中。如果后面需要单个数据,可以将数组用遍历将每个数据拿出来。

案例

  1. 输出两个数中的大数
function getMax(num1, num2) {
    if (num1 > num2) {
        return num1;
    } else {
        return num2;
    }
    //return num1 > num2 ? num1 : num2; 也可以用三元表达式
}
getMax(5, 8);
  • 求数组[5, 2, 99, 101, 67, 77]中的最大值
function getMax(arr) {
    var max = 0;
    for (var i = 0; i < arr.length;i++) {
        if (arr[i] > max) {
            max = arr[i];
        }
    }
    return max;
}
var re = getMax([5, 2, 99, 101, 67, 77,220]);
console.log(re);//re是result 结果的缩写

函数表达式

  • 函数表达式是函数定义的另外一种方式。
  • 定义方法:就是将函数的定义、匿名函数赋值给一个变量。
  • 函数定义赋值给一个变量,相当于将函数整体矮化成了一个表达式
  • 这种方式声明的函数叫匿名函数(函数没有函数名)。
  • 调用函数表达式,方法是给变量名加()执行,不能使用函数名加()执行
var foo2 = function (eat) {
    console.log(eat);
};
// 调用函数
foo2("吃鸡腿");

函数的数据类型

  • 函数是一种单独的数据类型 Function类型。
  • 由于函数是一种数据类型,可以参与其他程序。
  • 例如,可以把函数作为另一个函数的参数,在另一个函数中调用。
  • 或者,可以把函数作为另一个函数的返回值,从函数内部返回。

arguments 对象

  • JavaScript 中,arguments 对象是比较特别的一个对象,实际上是函数的一个内置对象。也就是说所有函数都内置了一个 arguments 对象,arguments 对象中存储了传递的所有的实参。
  • arguments 是一个伪数组,可以按照数组方式进行遍历。
    • 伪数组 并不是真正意义上的数组
      • 具有数组的length属性
      • 按照索引的方式来储存
      • 没有真正数组的一些方法,pop(),push()等
  • 函数的实参个数和形参个数可以不一致,所有的实参都会存储在函数内部的 arguments 类数组对象中。
  • 如果实参个数多于形参个数,则会从前往后取形参个数的实参。
  • 如果实参少于形参,那么对应不上的形参,结果就是undefined。(因为形参可以看成是不用声明的变量,变量没有接收值就是undefined)

arguments 案例

定义一个求和函数,如果传入 1 个参数,返回它自己,如果传入两个参数,返回他们的和,如果传入三个参数,先比较前两个的大小,大的与第三个参数求和返回,如果传入 4 个及以上,输出错误提示。

  • 定义求和函数
function sum(a, b, c) {
    // 条件分支语句
    switch (arguments.length) {
        case 1:
            return a;
            break;
        case 2:
            return a + b;
            break;
        case 3:
            return a > b ? a + c : b + c;
            break;
        default:
            throw new Error("参数不能超过三个")
    }
}
console.log(sum(1));
console.log(sum(1, 2));
console.log(sum(1, 2, 3));
console.log(sum(1, 2, 3,4));
  • 利用函数求任意个数中的最大值
function getMax() {
    var max = arguments[0];
    for (var i = 0; i < arguments.
length; i++) {
        if (arguments[i] > max) {
            max = arguments[i]
        }
    }
    return max;
}
var re = getMax(2, 8, 5, 999, 555, 
5);
console.log(re);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值