一、定义
1、概念
函数是一个可以重复使用的程序模块,该程序模块可以完成一个特定的功能
2、声明
function 函数名(【参数】]){
函数体语句
}
3、函数的调用:
(1)带返回值的函数(函数体中有return语句的函数):赋予给变量或打印输出
关于函数的返回值:
a、函数是否要返回值由具体的需求决定
b、函数返回值通过return语句来完成。在函数中一旦执行了return语句,当前函数就结束运行
(2)无返回值的函数调用:直接使用 函数名( )
二、函数的参数:
1、定义:函数在运行时需要外部的数据才能实现具体的功能。这个外部的数据就是参数
2、形参:形式参数,没有实际值,只是一个占位符
3、实参:实在参数。表示的是一个实际值
4、参数传递方向是单向的,实参--->形参
5、函数参数的数量:在javascript中允许函数的形参与实参不同
(1)、实参的数量多于形参的数量:函数可以正常运行,多余的实参被忽略
(2)、实参的数量少于形参的数量:多出的形参是一个已声明未赋值的变量,它的值是undefined
三、arguments对象的使用
1、是内置对象:已经定好的,用户只要使用即可
2、作用:调用函数时,函数的实参都保存在arguments对象中
注意:每个函数内部都有一个arguments对象,本质是一个数组,保存的是调用函数时传递的实参
四、函数表达式:
1、定义
将定义的函数赋给一个变量,通过变量完成函数的调用和参数传递(即函数是匿名的)
语法:
var / let / const 变量名 = function(【参数】){
函数体语句
}
2、调用:变量名(【参数】)
五、函数的递归调用(重点、难点)*
1、递归调用:函数自己调用自己(即在函数的函数体语句中调用自己)
2、递归算法:
(1)用递归方式解决问题的前提
a、问题可以进行分解,分解得到的新问题的解法与原问题的解法相同
8! --> 8 * 7! --->7 * 6!-->.......-->2 * 1!
b、问题的分解过程必须有明确的结束条件
(2)递归的过程
a、自上而下分解问题:得到最简单的问题的解
b、自下而上回溯得到原问题的解
3、代码实现:
//递归解决1-100的和
function sum(n){
if(n == 1){
return 1
}else{
return n + sum(n-1)
}
}
let t = sum(100)
console.log(`1-100的和是:`,t)