JavaScript 函数(含经典案例:反转数组、求所有参数最大值、判断闰年、获取指定年份的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(12);
// 2.如果实参的个数多于形参的个数会取到形参的个数
getSum(123);
// 3.如果实参的个数小于形参的个数﹑多于的形参定义为undefined最终的结果就是NaN
//形参可以看做是不用声明的变量,num2是一个变量但是没有接受值,结果就是undefined
getSum(1);// NaN
//建议我们尽量让实参的个数和形参相匹配

4. 函数的返回值

函数的返回值格式

function 函数名({
	return 需要返回的结果;
}
函数名();

(1)我们函数只是实现某种功能,最终的结果需要返回给函数的调用者——函数名(),通过return实现的;
(2)只要函数遇到return就把后面的结果返回给函数的调用者,函数名() = return 后面的结果
(3)代码验证

	function getResult() {
		return 666;
	}
	getResult(); //getResult()= 666
	console.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(12));

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());//返回666
	
	function 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);//里面存储了所有传递过来的实参
		//我们可以按照数组的方式遍历arguments
		for (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();
  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值