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月份的天数)相关推荐

  1. Py之re:re正则表达式库的简介、常用函数、经典案例之详细攻略

    Py之re:re正则表达式库的简介.常用函数.经典案例之详细攻略 目录 re正则表达式库的简介 1.正则表达式元字符表集合--正则表达式的pattern re正则表达式库的常用函数 1.re.comp ...

  2. Calendar类的小案例:获取任意年份的2月份有多少天

    Calendar类的小案例:获取任意年份的2月份有多少天 public class Demo3 {public static void main(String[] args) {//1.随机输入一个年 ...

  3. JavaScript基础部分经典案例

    再复杂的程序都是由一个个简单的部分组成. 001案例 - 交换两个变量的值 方法01 - 使用临时变量 var n1 = 5;var n2 = 6;// 创建一个临时中介变量 tmpvar tmp;/ ...

  4. JavaScript键盘事件经典案例

    JavaScript键盘事件五大经典案例 目录: JavaScript键盘事件五大经典案例 1.什么是键盘事件 2.常用键盘事件 3.常用属性和方法 4.案例 4.1 京东搜索框 4.2 快递单号输入 ...

  5. C语言九十五之实现经典的反转数组(通过指针或数组下标操作)

    1.题目 实现反转数组 比如数组 int a[] = {1, 2, 3, 4, 5}; 反转后得使得数组是这样 int a[] = {<

  6. JAVA 遍历数组求平均值与最大值

    求平均值与最大值 实现前需要懂得如何获取数组长度实现数组遍历 例如: int[] array = {2,3,6,8,18}; for(int i = 0 ; i<array.length; i+ ...

  7. JavaScript闭包之经典案例

    ①函数作为返回值 [1]例子1 function a() {var name='dov';return function(){return name;}}var b=a();console.log(b ...

  8. java求数组的平均值_Java中数组求平均值,最大值,最小值。

    //从控制台任意输入六个数字,然后输出六个数字的平均值,最大值以及最小值. import java.util.Scanner; public class Text2 { public static v ...

  9. 一道数组求连续子集最大值的题目。

    昨天晚上花了几个小时,终于把这个题目给实现了.后面再优化.今天先贴出来晒晒. 据说是浙江大学计算机系一道考研题目(给定一个有符号整形数组,输出和胃最大并且连续的子数组).当初只会算最大值,不会返回一个 ...

最新文章

  1. linux下后台执行shell脚本
  2. 2021年春季学期-信号与系统-第十三次作业参考答案-第一小题
  3. Lightoj 1123 - Trail Maintenance(最小增量生成树)
  4. 今天网络又出问题了,现在的问题变成原IP地址不可用
  5. python天气查询系统有什么知识点_Python入门 天气查询程序
  6. 谷歌浏览器怎么打开flash Chrome启用flash插件技巧分享
  7. python dictionary_Python 字典(Dictionary)
  8. 机器学习(二)——xgboost(实战篇)Pima印第安人数据集上的机器学习-分类算法(根据诊断措施预测糖尿病的发病)
  9. chainmaker go.mod no such file or directory
  10. 一道面试题,设计电路,set,reset
  11. 老板平常多说点好听的
  12. Atmega128串口配置的坑
  13. 吴伯凡-认知方法论-认知的两重性
  14. 美团点评_给出两个字符串(可能包含空格),找出其中最长的公共连续子串,输出其长度。
  15. douyin_xl,xa,xg,xk
  16. 和鸿蒙有关的词,写鸿蒙的诗句诗词,关于鸿蒙的古诗大全,描写鸿蒙的诗全集...
  17. 电影票在线选座API接口电影排期场次
  18. [Unity]项目工程文件太大删除Library文件夹会怎么样
  19. Set集合下的奇葩,TreeSet有序而且类型相同
  20. 联系我们吧 - 12个联系我们表单和页面设计赏析和学习

热门文章

  1. 代码随想录算法训练营第三十二天_第八章_贪心算法 | 122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II
  2. Maven知识点一览
  3. 计算机主板安装软件等故障分析思路,计算机主板故障分析与维修.doc
  4. 严重: Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.
  5. 电磁力电子分析称重传感器模块故障排除与维护保养
  6. IOS图标 HTML规范,最新iOS设计规范八|3大图标和图像规范(Icons and Images)
  7. 3.Flask-SQLAlchemy
  8. yolov3 使用darknet的python接口处理单张图片和视频和摄像头视频流
  9. linux 电池管理软件,Linux电源管理笔记本模式工具1.65来延长电池续航能力
  10. 教你轻松搞定RJ45网线接头