企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
[TOC] # 1.函数的概念 (function) 在JS里面,可能会定义非常多的相同代码或者功能相似的代码,这些代码可能需要大量重复使用。 虽然for循环语句也能实现-些简单的重复操作,但是比较具有局限性,此时我们就可以使用**JS中的函数**。 > 函数就是封装了一段可以被重复执行调用的代码块目的:就是让大 量代码重复使用 # 函数的使用 (1、声明   2、调用) ## 1、声明 ~~~ // 1.声明函数 // function 函数名() { // 函数体 // } function sayHi() { console.log( 'hi~~'); // (1) function 声明函数的关键字全部小写 // (2) 函数是做某件事情,函数名一般是动词sayHi // (3) 函数不调用自己不执行 ~~~ ●**function**是声明函数的关键字,**必须小写** ●由于函数-般是为了实现某个功能才定义的,所以通常我们将**函数名**命名为**动词**,比如getSum ### 2种声明 命名 ![](https://img.kancloud.cn/68/2d/682d8a6642cab14791122a3deffd5ca6_1202x487.png) // (1) fun是变量名不是函数名 // (2) 函数表达式声明方式跟声明变量差不多,只不过变量里面存的是值而函数表达式里面存的是函数 // (3) 函数表达式也可以进行传递参数 ## 2、调用函数 ~~~ //函数名(); sayHi(); ~~~ ●调用的时候千万不要忘记添加小括号 ●口诀:函数不调用,自己不执行。 注意:声明**函数本身并\*\*\*\*不会执行**代码,**只有调用**函数时**才会执行**函数体代码。 2.3函数的封装 (打包) ●函数的封装是把一个或者多 个功能通过**函数的方式封装起来**,对外只提供一个简单的函数接口 ●简单理解:封装类似于将电脑配件整合组装到机箱中(类似快递打包) ![](https://img.kancloud.cn/9c/46/9c46455328a9c26b8bbd2fa7eea1991d_974x387.png) # 函数形参(声明),实参(调用) ![](https://img.kancloud.cn/16/50/165051b1794e881478f31b86d7ff91b1_1123x386.png) ~~~ //2.我们可以利用函数的参数实现函数重复不同的代码 //在声明函数的小括号里面是形参(形式 上的参数) function函数名(形参1,形参2...) { } 函数名(实参1,实参2...); // 在函数调用的小括号里面是实参( 实际的参数) ~~~ 注意点 (1)多个参数之间用逗号隔开 (2)形参可以看做是不用声明的变量 ## 参数使用 ![](https://img.kancloud.cn/77/36/7736e95c29afa456355b1c5866912ae5_1074x289.png) ## 函数形参和实参个数不匹配问题 ![](https://img.kancloud.cn/d7/79/d77969c24fcda93b3ef10a4dd421ded2_994x536.png) # 函数的参数小结 ![](https://img.kancloud.cn/f2/92/f292de8fc9c3c8528b76417c9b2079a1_816x289.png) # 4.函数的返回值 ## 4.1 return语句 ### 2.函数的返回值格式 ~~~ function函数名() { return; //需要返回的结果 函数名(); ~~~ // (1)我们函数只是实现某种功能,最终的结果需要返回给函数的调用者函数名()通过return实现的 // (2) 只要函数遇到return就把后面的结果返回给函数的调用者 函数名() = return后面的结果 ### 函数的返回值格式 (运用) ![](https://img.kancloud.cn/cd/a0/cda09b75cfab04b163e1a9ad48cdedf2_778x216.png) ## 4.2 return终止函数 return语句之后的代码不被执行。 ![](https://img.kancloud.cn/0e/bd/0ebde01d9ecafeca9158ee0a3a6bca9b_844x253.png) ## 4.3 return的返回值 return只能返回一个值。如果用逗号隔开多个值,以最后一个为准。 ![](https://img.kancloud.cn/e6/77/e67744b41af40ba336faa0a64b673b28_737x182.png) 用数组返回多个数据 ![](https://img.kancloud.cn/cb/dd/cbdd5024d856960781d20c9b4b68e180_1033x214.png) ## 4.4函数没有return返回und efined 我们的函数**如果有return**则**返回**的是**return 后面的值**,如果**函数没有return**则**返回undefined** ![](https://img.kancloud.cn/45/a0/45a0f0e96ebd21f8d66b9d619365e75f_914x283.png) ## 4.5 break ,continue ,return 的区别 ●break :**结束当前的循环体**(如for. while ) ●continue :**跳出本次**循环,**继续执行下次循环**(如for. while ) ●return :不仅可以**退出循环**,还能够**返回return语句**中的**值**,同时还可以**结束当前的函数体内的代码** ## 4.通过榨汁机看透函数 ![](https://img.kancloud.cn/6e/09/6e099f72f4434baf1c41e55abb8de5a1_1343x507.png) # arguments的使用 (自动获取实参数量) ![](https://img.kancloud.cn/e9/52/e9528df0d2d42d29692d9ed4363079ae_1068x143.png) arguments的使用**只有函数才有arguments对象**而 且是**每个函数**都**内置好了这个arguments** ~~~ function fn() { // console. log(arguments); //里面存储了所有传递过来的实参arguments = [1,2,3] // console. log( arguments . length); // console . log( arguments[2]); //我们可以按照数组的方式遍历arguments for (var i = 0; i < arguments .length; i++) { console . log(arguments[i]); } fn(1, 2, 3); fn(1,2, 3, 4y 5); //伪数组并不是真正意义上的数组 // 1.具有数组的length 属性 //2.按照索引的方式进行存储的 // 3.它没有真正数组的一些方法pop()、push()等等 ~~~ ## 5\. arguments的使用 ### 案例:利用函数求任意个数的最大值 (重点看) ![](https://img.kancloud.cn/5e/5d/5e5d641ebf8ae6e3889079033a569b6a_935x418.png) # 函数可以调用另外一个函数 因为每个函数都是独立的代码块,用于完成特殊任务,因此经常会用到函数相互调用的情况。 ![](https://img.kancloud.cn/9c/a2/9ca223697057798f1dc31be801262d83_1008x371.png) 函数是可以相互调用的 分析 ![](https://img.kancloud.cn/76/52/765241075ff73daa8fde6d576dda3441_942x372.png) ![](https://img.kancloud.cn/be/d4/bed4d5170852544ef18cb80fa3ae98e2_1516x818.png) ## 案例1:用户输入年份,输出当前年份2月份的天数 (重点) 如果是闰年,则2月份是29天,如果是平年,则2月份是28天 ### 代码实验 ![](https://img.kancloud.cn/09/53/0953ba4a76b8eba259f76e9ffb173d6f_1033x695.png) # 实验 ## 利用函数计算1-100之间的累加和 代码实验 ~~~ //利用函数计算1-100之间的累加和 //1.声明函数 function getSum() { varsum=0; for(var i=1;i<=100;i++){ sum += i; console.log(sum); // 2.调用函数 getSum(); getSum(); ~~~ ## 1.利用函数求任意两个数的和 ~~~ function getSum(num1, num2) { console .1og(num1 + num2) ; getSum(1, 3); getSum(3, 8); ~~~ ## 2.利用函数求任意两个数之间的和 ~~~ function getSums(start, end) { var sum = 0; for (var i = start; i <= end; i++) { sum += i; console .1og(sum); } getSums (1,100); 注意点 (1)多个参数之间用逗号隔开 (2)形参可以看做是不用声明的变量 ~~~ ## 返回值 利用函数求两个数的最大值 ### if 返回两个数的最大值 (返回值) ~~~ function getMax (num1, num2) { if (num1 > num2) { return num1; } else { return num2 ; } } console .1og(getMax(1, 3)); console .1og(getMax(11, 3)); ~~~ ### 三元运算符 返回两个数的最大值 (返回值) ~~~ function getMax(num1, num2) { return num1 > num2 ? num1 : num2; } console .1og(getMax(1, 3)); console .1og(getMax(11, 3)); ~~~ ### 案例2 :利用函数求任意一个数组中的最大值 求数组\[5,2,99,101,67,77\]中的最大数值。 实验代码 ![](https://img.kancloud.cn/da/8c/da8c24f66830f49b843e55fc57744e16_1143x547.png) # 案例3 :利用函数封装方式,翻转任意一个数组 (排顺序**重点**) ## 案例分析 ![](https://img.kancloud.cn/3c/e9/3ce9d2384a29f3c45af06d82a2bb1eec_898x500.png) ### 代码实现 ![](https://img.kancloud.cn/7f/31/7f31637c6bf69d1c974c95cf5c9e4b76_978x426.png) # 案例3:利用函数封装方式,对数组排序--冒泡排序 (数字位子互换 重点) ## 案例分析 ![](https://img.kancloud.cn/c5/3c/c53c8bcb0d11bf17a75a0d4e2dc83e6a_872x421.png) ### 代码实验 ![](https://img.kancloud.cn/e8/ab/e8abc87cba9ef5fa737d95ba9cdf8cdb_904x555.png) # 案例4:判断闰年 (if 判断语句) 要求:输入一个年份,判断是否是闰年(闰年:能被4整除并且不能被100整数,或者能被400整除) ## 代码实验 ![](https://img.kancloud.cn/0a/22/0a22aae4a04e485a20021b0999adfd65_966x391.png)