函数
-
概念:函数本身可以看做一段代码的容器,一个可以包含一堆代码,一个函数名可以重复使用
-
语法:
1.定义函数 function 函数名(){ 需要执行的一段代码(函数体); } var 函数名 = function(){ 需要执行的一段代码(函数体); } 2.调用函数 函数名()
-
注意:
- 函数一旦定义,可以在程序中多次使用
- 每调用一次函数,就会执行一次函数体中的代码。
- 函数名命名规则:
- 可以使用数字、字母、_等构成
- 不会使用数字开头
- 见词达意
函数参数
- 概念:函数提供传递参数的机制,来实现函数针对不同的数据进行处理,完成相同的操作。
参数的分类
形式参数
-
本质上就是一个变量,写在函数定义()中,该变量可以在函数中可以被调用会自动进行创建,在函数体里面会接收函数在调用时传入实际参数。可以将对应的实际参数的值体进行使用
-
语法:
function 函数名(形式参数){ 函数体 形式参数可以在函数体中使用。 }
-
注意:形式参数只能在当前的函数体中使用,不能在其他地方使用。
实际参数
-
在调用函数时,写在函数名()中数据
-
在函数调用时,我们会把需要处理的数据通过实际参数传递到函数中的形式参数,在函数中通过形式参数来接收传递过来的实际参数的值,可以在函数体中进行操作。
-
语法:
调用函数时: 函数名(实际参数) 列子: function name(params) { console.log(`这是一个孩子`); } name(`小孩子`); naem(`大孩子`);
参数使用
-
如果需要传递多个数据,多个形式参数和实际参数一一对应的
-
语法
function 函数名(形参1,形参2,形参3...形参n){ 函数体 形式参数可以在函数体中使用。 } 函数名(实参1,实参2,实参3...实参n)
输出这个函数
function jiecheng(n) {
var sum = 0;
let jiecheng = 1;
for (let i = 1; i <= n; i++) {
jiecheng *=i;
sum += jiecheng;
}
return sum
}
console.log(jiecheng(5));
函数表达式
-
将定义的函数赋给一个变量,哦通过变量完成函数的调用和参数传递(即函数是匿名的)
-
语法:
var / let / const 变量名 = function[参数]{ 函数体语句 } 例子: let child = function (num1, num2) { if (num1 < num2) { return num1 } else { return num2 } } console.log(child(100,2));//2
函数的递归调用(重点,难点)
- 递归调用:函数自己调用自己(即在函数的函数体语句中调用自己)
递归
-
递归算法:
-
用递归方式解决问题的前提
-
问题可以进行分解,分解得到的新问题的解法与原问题解法相同
比如计算8!阶乘:可以分解为 8 * 7!
-
问题的分解过程必须有明确的结束条件。
-
-
递归的过程:
- 自上而下分解问题:得到最简单问题的解
- 自下而上(回溯)得到原问题的解
-
-
代码实现:
//递归函数计算 n! function num(n) { //明确递归结束的条件 if (n == 1) { return 1; } else { //继续分解n return n * num(n - 1) } } console.log(num(5));
练习1:定义递归函数,计算1+2+3+…100的值
function num(n) { if ( n == 1) { return n; } else { return n + num(n-1) } }console.log(num(100));