JavaScript的函数详解

一、什么是函数

函数是一个独立的功能模块,可以重复使用,维护方便。
在编写代码时,可能会出现非常多的相同代码,或者功能类似的代码,这些代码可能需要大量重复使用,此时就可以使用JavaScript中的函数。

二、函数的使用

1、函数的声明

基本语法格式如下:

 function 函数名([参数]){
		    函数体语句;
		}

(1)‘function’:是关键字,必须小写。

(2)‘函数名’:用户标识符,建议采用驼峰命名(第一个单词是动词,后面的单词首字母大写) ,做到’见名知义’。

(3)‘参数’:函数可以有参数也可以没有参数。’()'不能省略的。

(4)’{}’:表示函数的作用范围(可写可不写)。

2、函数的调用

(1)直接调用:函数名(参数)

(2)触发事件调用:事件名 = 函数名(参数)

function getSum(a,b){
    var sum = a+b;
    return sum;
}
console.log('sum=',getSum(2,3));

在这里插入图片描述

3、函数的参数:参入运算的数据

(1)形参(形式参数)

在函数定义时出现在函数首部的参数,只是占位符,没有实际的数据

(2)实参(实在参数):

在函数调用时出现在函数首部的参数,是有确定值的变量或常量

(3)参数之间的数据传递

实参将数据传递给形参(按值传递),传递的方向是单向的(实参–>形参)

数据传递时实参和形参按从左到右一一对应匹配与名称无关

(4)参数的数量

函数的实参和形参的个数可以不同

A、实参的个数多于形参的个数:函数正常运行,多余的实参被忽略

B、实参的个数少于形参的个数: 多余的形参会变成undefined的变量

参数传递过程如下:

function swap(a,b){
    console.log("形参:a="+a+",实参:b="+b);
    var temp = a;
    a = b;
    b = temp;
    console.log("形参:a="+a+",实参:b="+b);
}
var t = 10;k = 25;
console.log("实参:t="+t+",k="+k);
swap(t,k);
console.log("实参:t="+t+",k="+k);

在这里插入图片描述

4、函数的返回值:函数可以有返回值,也可以没有返回值。

(1)有返回值的函数:函数体中通过return语法返回一个值,这个决定程序下一步操作

(2)无返回值的函数:函数只实现某种功能,不需要返回值(函数体中没有return语句)

三、arguments的使用

当不确定函数中接收到了多少个实参的时候,可以用arguments来获取实参。这是因为arguments是当前函数的一个内置对象,所有函数都内置了一个arguments对象,该对象保存了函数调用时传递的所有的实参。

function fn() {
    console.log(arguments);	  // 输出结果:Arguments(3) [1, 2, 3, …]
    console.log(arguments.length);  // 输出结果:3
    console.log(arguments[1]);         // 输出结果:2
  }
  fn(1, 2, 3);

在这里插入图片描述

四、函数进阶

1、函数表达式

是将声明的函数赋值给一个变量,通过变量完成函数的调用和参数的传递,函数表达式的定义必须在调用前。

var sum = function(num1, num2) {	// 函数表达式
  return num1 + num2;
};
console.log(sum(1, 2));	               // 调用函数,输出结果:3 

2、回调函数

指的就是一个函数A作为参数传递给一个函数B,然后在B的函数体内调用函数A。此时,称函数A为回调函数。

例如:

function cal(num1, num2, fn) {
  return fn(num1, num2);
}
console.log(cal(45, 55, function (a, b) {
  return a + b;
}));

3、递归调用

指的是一个函数在其函数体内调用自身的过程,这种函数称为递归函数。以根据用户的输入计算指定数据的阶乘为例进行讲解:

(1)什么是递归:函数自己调用自己

(2)用递归解决问题条件

A、问题可以分解,分解后得到的新问题的解法与原问题的解法相同

B、分解的过程要有明确的结束条件

(3)递归的过程:

A、自上而下分解问题:5!
	   
	      5!-->5*4!
		          4! -->4*3!
				          3!-->3*2!
						         2!-->2*1!
								 
B、自下而上回溯得到问题的解
	     
          1!-->2!-->3!-->4!-->5!

JavaScript代码实现如下:

function factorial(n) {	// 定义回调函数
    if (n == 1) { return 1;  }// 递归出
    return n * factorial(n - 1);
  }
  var n = prompt('求n的阶乘\n n是大于等于1的正整数,如2表示求2!。');
  n = parseInt(n);
  if (isNaN(n)) 
  { console.log('输入的n值不合法') } 
  else {  console.log(n + '的阶乘为:' + factorial(n)); 
}
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力做一只合格的前端攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值