JavaScript 函数(含经典案例:反转数组、求所有参数最大值、判断闰年、获取指定年份的2月份的天数)
JavaScript 函数
- 一、 函数的使用
- 1. 声明函数:
- 2. 调用函数
- 二、 函数的参数
- 1. 形参和实参的定义
- 2. 形参和实参的使用
- 3. 函数形参和实参个数不匹配问题
- 4. 函数的返回值
- 三、arguements的使用
- 四、经典案例
- 反转数组
- 求所有参数中的最大值
- 判断闰年
- 获取指定年份的2月份的天数
可以实现某种特定功能的代码块。
一、 函数的使用
函数在使用时分为两步︰声明函数和调用函数。
1. 声明函数:
function 函数名([参数]){函数体语句}
(1)function是一个关键字,全部小写;
(2)函数名:是一个标识符,建议使用驼峰命名,做到见名知义;
(3)函数可以有参数也可以没有参数,可以有多个参数,若有多个参数,参数之间用逗号分隔;
(4)"{}"表示函数的控制范围,不能省略;
(5)函数体语句可以有多条,建议一个函数只完成一个功能
- 内聚:模块内部结合的紧密程度
- 耦合:模块之间结合的紧密程度
声明方式
(1)利用函数关键字自定义函数(命名函数)
function fn() {}fn();
(2)函数表达式(匿名函数)
定义:将声明的函数赋值给一个变量,通过变量完成函数的调用和参数的传递。
函数表达式的定义必须在调用前。
var 变量名 = function() {};var fun = function() {console.log('函数表达式');}fun();
- fun是变量名不是函数名
- 函数表达式声明方式跟声明变量差不多,只不过变量里面存的是值而函数表达式里面存的是函数
2. 调用函数
//调用函数
函数名(); //通过调用函数名来执行函数体代码事件名 = 函数名([参数]);
函数可以重复调用:
function cook() {console.log('酸辣土豆丝');cook();cook();
调用的时候千万不要忘记添加小括号
口诀︰函数不调用,自己不执行。
注意 :声明函数本身并不会执行代码,只有调用函数时才会执行函数体代码。
二、 函数的参数
1. 形参和实参的定义
在声明函数时,可以在函数名称后面的小括号中添加一些参数,这些参数被称为形参,而在调用该函数时,同样也需要传递相应的参数,这些参数被称为实参。
参数 | 说明 |
---|---|
形参 | 形式上的参数 函数定义的时候传递的参数 当前并不知道是什么 |
实参 | 实际上的参数 函数调用的时候传递的参数 实参是传递给形参的 |
(1)形参(形式参数):在定义函数时出现在函数首部的参数,在定义函数时形参只是占位符,没有确定的值;
(2)实参(实际参数):函数调用时出现在函数首部的参数,是实际的值。
2. 形参和实参的使用
参数的作用:在函数内部某些值不能固定,我们可以通过参数在调用函数时传递不同的值进去。
(1)我们可以利用函数的参数实现函数重复不同的代码
function 函数名(形参1,形参2...) { //在声明函数的小括号里面是形参(形式上的参数)}函数名(实参1,实参2...);//在函数调用的小括号里面是实参(实际的参数)
(2)形参和实参的执行过程
参数的传递方式:实参将数据传递给形参。
实参向形参传递数据是单向的,形参的改变不会影响到实参。
function cook(aru) { //形参是接受实参的 aru = '酸辣土豆丝' 形参类似于一个变量
console.log(aru);cook('酸辣土豆丝');
cook('大肘子');
(3)函数的参数可以有,也可以没有个数不限。
注意点
(1)多个参数之间用逗号隔开;
(2)形参可以看做是不用声明的变量。
3. 函数形参和实参个数不匹配问题
参数个数 | 说明 |
---|---|
实参个数等于形参个数 | 输出正确结果 |
实参个数多于形参个数 | 只取到形参的个数 |
实参个数少于形参个数 | 多的形参定义为undefined,结果为NaN |
注意:在JavaScript中,形参的默认值是undefined。
// 1.如果实参的个数和形参的个数一致则正常输出结果
getSum(1,2);
// 2.如果实参的个数多于形参的个数会取到形参的个数
getSum(1,2,3);
// 3.如果实参的个数小于形参的个数﹑多于的形参定义为undefined最终的结果就是NaN
//形参可以看做是不用声明的变量,num2是一个变量但是没有接受值,结果就是undefined
getSum(1);// NaN
//建议我们尽量让实参的个数和形参相匹配
4. 函数的返回值
函数的返回值格式
function 函数名(){return 需要返回的结果;
}
函数名();
(1)我们函数只是实现某种功能,最终的结果需要返回给函数的调用者——函数名(),通过return实现的;
(2)只要函数遇到return就把后面的结果返回给函数的调用者,函数名() = return 后面的结果
(3)代码验证
function getResult() {return 666;}getResult(); //getResult()= 666console.log(getResult());//打印666
//求任意两个数的和function getSum(num1,num2) {return num1 + num2;}console.log(getSum(1,2)); // 3
return 终止函数
return语句之后的代码不被执行。
注意事项:
1. return终止函数
function getSum(num1, num2) {return num1 + num2; //return后面的代码不会被执行 alert('是不会被执行的! ')}console.log(getSum(1,2));
2. return只能返回一个值
function fn(num1, num2) {return num1, num2;//返回的结果是最后一个值}console.log(fn(1, 2));
例:
求任意两个数的加减乘数结果
function getResult(num1, num2) {return [num1 + num2, num1 - num2, num1 * num2, num1 / num2];
}
var re = getResult(1,2);//返回的是一个数组[3,-1,2,0.5]
console.log(re);
3 . 我们的函数如果有 return 则返回的是 return 后面的值,如果函数没有 return,则返回undefined。
function fun1(){return 666;}console.log(fun1());//返回666function fun2() {}console.log(fun2());//函数返回的结果是undefined
4. break, continue, return 的区别
break :结束当前的循环体(如for、while );
continue :跳出本次循环,继续执行下次循环(如for、while );
return :不仅可以退出循环,还能够返回return语句中的值,同时还可以结束当前的函数体内的代码。
三、arguements的使用
当我们不确定有多少个参数传递的时候,可以用arguments来获取。在JavaScript中,arguments实际上它是当前函数的一个内置对象。所有函数都内置了一个arguments对象,arguments对象中存储了传递的所有实参。
arguments展示形式是一个伪数组,因此可以进行遍历。伪数组具有以下特点:
- 具有length属性;
- 按索引方式储存数据;
- 不具有数组的push , pop等方法。
function fn() {console.log(arguments);//里面存储了所有传递过来的实参//我们可以按照数组的方式遍历argumentsfor (var i = 0; i < arguments.length; i++) {console.log(arguments[i]);}}fn(1,2,3,4,5);//先完整打印arguments,再依次打印1,2,3,4,5
四、经典案例
反转数组
编写一个reverse()函数,该函数的参数是一个数组,在函数中会对数组中的元素顺序进行反转,返回反转后的数组。
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); // 输出结果:(5) [9, 6, 4, 3, 1]
求所有参数中的最大值
案例要求:编写一个getMax()函数,该函数可以传任意数量的参数,在函数中会找出所有参数中最大的一个值,将该值返回。
function getMax() {var max = arguments[0];for (var i = 1; i < arguments.length; i++) {if (arguments[i] > max) { max = arguments[i]; }}return max;
}
console.log(getMax(11, 2, 34, 666, 5, 100)); // 输出结果:666
判断闰年
案例要求:编写一个isLeapYear()函数,该函数的参数是一个年份数字,在函数中会判断该年份是否为闰年,返回布尔值的结果。
function isLeapYear(year) {var flag = false;if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {flag = true;}return flag;
}
console.log(isLeapYear(2020) ? '2020是闰年' : '2020不是闰年');
console.log(isLeapYear(2021) ? '2021是闰年' : '2021不是闰年');
获取指定年份的2月份的天数
案例要求:编写一个fn()函数,该函数调用后会弹出一个输入框,要求用户输入一个年份,输入以后,程序会提示该年份的2月份有多少天。
function fn() {var year = prompt('请输入年份:');if (isLeapYear(year)) { alert(‘当前年份是闰年,2月份有29天’); }else { alert('当前年份是平年,2月份有28天'); }
}
function isLeapYear(year) {var flag = false;if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {flag = true;}return flag;
}
fn();
JavaScript 函数(含经典案例:反转数组、求所有参数最大值、判断闰年、获取指定年份的2月份的天数)相关推荐
- Py之re:re正则表达式库的简介、常用函数、经典案例之详细攻略
Py之re:re正则表达式库的简介.常用函数.经典案例之详细攻略 目录 re正则表达式库的简介 1.正则表达式元字符表集合--正则表达式的pattern re正则表达式库的常用函数 1.re.comp ...
- Calendar类的小案例:获取任意年份的2月份有多少天
Calendar类的小案例:获取任意年份的2月份有多少天 public class Demo3 {public static void main(String[] args) {//1.随机输入一个年 ...
- JavaScript基础部分经典案例
再复杂的程序都是由一个个简单的部分组成. 001案例 - 交换两个变量的值 方法01 - 使用临时变量 var n1 = 5;var n2 = 6;// 创建一个临时中介变量 tmpvar tmp;/ ...
- JavaScript键盘事件经典案例
JavaScript键盘事件五大经典案例 目录: JavaScript键盘事件五大经典案例 1.什么是键盘事件 2.常用键盘事件 3.常用属性和方法 4.案例 4.1 京东搜索框 4.2 快递单号输入 ...
- C语言九十五之实现经典的反转数组(通过指针或数组下标操作)
1.题目 实现反转数组 比如数组 int a[] = {1, 2, 3, 4, 5}; 反转后得使得数组是这样 int a[] = {<
- JAVA 遍历数组求平均值与最大值
求平均值与最大值 实现前需要懂得如何获取数组长度实现数组遍历 例如: int[] array = {2,3,6,8,18}; for(int i = 0 ; i<array.length; i+ ...
- JavaScript闭包之经典案例
①函数作为返回值 [1]例子1 function a() {var name='dov';return function(){return name;}}var b=a();console.log(b ...
- java求数组的平均值_Java中数组求平均值,最大值,最小值。
//从控制台任意输入六个数字,然后输出六个数字的平均值,最大值以及最小值. import java.util.Scanner; public class Text2 { public static v ...
- 一道数组求连续子集最大值的题目。
昨天晚上花了几个小时,终于把这个题目给实现了.后面再优化.今天先贴出来晒晒. 据说是浙江大学计算机系一道考研题目(给定一个有符号整形数组,输出和胃最大并且连续的子数组).当初只会算最大值,不会返回一个 ...
最新文章
- linux下后台执行shell脚本
- 2021年春季学期-信号与系统-第十三次作业参考答案-第一小题
- Lightoj 1123 - Trail Maintenance(最小增量生成树)
- 今天网络又出问题了,现在的问题变成原IP地址不可用
- python天气查询系统有什么知识点_Python入门 天气查询程序
- 谷歌浏览器怎么打开flash Chrome启用flash插件技巧分享
- python dictionary_Python 字典(Dictionary)
- 机器学习(二)——xgboost(实战篇)Pima印第安人数据集上的机器学习-分类算法(根据诊断措施预测糖尿病的发病)
- chainmaker go.mod no such file or directory
- 一道面试题,设计电路,set,reset
- 老板平常多说点好听的
- Atmega128串口配置的坑
- 吴伯凡-认知方法论-认知的两重性
- 美团点评_给出两个字符串(可能包含空格),找出其中最长的公共连续子串,输出其长度。
- douyin_xl,xa,xg,xk
- 和鸿蒙有关的词,写鸿蒙的诗句诗词,关于鸿蒙的古诗大全,描写鸿蒙的诗全集...
- 电影票在线选座API接口电影排期场次
- [Unity]项目工程文件太大删除Library文件夹会怎么样
- Set集合下的奇葩,TreeSet有序而且类型相同
- 联系我们吧 - 12个联系我们表单和页面设计赏析和学习
热门文章
- 代码随想录算法训练营第三十二天_第八章_贪心算法 | 122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II
- Maven知识点一览
- 计算机主板安装软件等故障分析思路,计算机主板故障分析与维修.doc
- 严重: Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.
- 电磁力电子分析称重传感器模块故障排除与维护保养
- IOS图标 HTML规范,最新iOS设计规范八|3大图标和图像规范(Icons and Images)
- 3.Flask-SQLAlchemy
- yolov3 使用darknet的python接口处理单张图片和视频和摄像头视频流
- linux 电池管理软件,Linux电源管理笔记本模式工具1.65来延长电池续航能力
- 教你轻松搞定RJ45网线接头