05function.md
goer ... 2022-01-05 大约 2 分钟
[toc]
# 函数
function:
一个功能和方法.
匿名函数(回调函数:调用一次)和名称函数(可以多次调用)
// 语法
function 函数名(参数...){
// 执行代码
return 函数执行的结果
}
1
2
3
4
5
2
3
4
5
//乘法
function multi(a,b){ //形参
var multiResult= a*b;
console.log(multiResult)
}
// 调用 可以重复调用
multi(10,20); // 实参
1
2
3
4
5
6
7
2
3
4
5
6
7
形参:形式上的参数,函数声明后括号的变量
实参:实际传入的参数,调用传入的变量
return 想要的返回值
: 返回函数执行的结果
// 加法
function addplus(a,b,c,d,e){
var sum = a+b+c+d+e;
return sum;
}
var add1 = addplus(1,3,5,8,10);
console.log(add1);
1
2
3
4
5
6
7
2
3
4
5
6
7
如果有些值是一直是一样的,默认的这种
给形参加默认值,如果不传参,就使用默认值,只能从最后一个加着过来
function addplus(a,b,c,d=1,e=10){
var sum = a+b+c+d+e;
return sum;
}
var add1 = addplus(1,3,5); // 不传使用默认值
var add1 = addplus(1,3,5,4); // d传了,e没传,所有d=4 e=默认
1
2
3
4
5
6
2
3
4
5
6
# 递归函数
函数内部调用本函数的功能(需要一个判断点)
// 递归函数 累加
function accumulation(n){
if(n==1){
return 1;
}else{
return n+accumulation(n-1);
}
accumlation(10) //10的累加
// (10)
// 10+(9)
// 10+9+(8)
// 10+9+8+(7)
// 10+9 ... +1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 函数作用域
函数内部的变量叫
局部变量
,不能拿到函数外部使用函数外部的变量叫
全局变量
,函数外部的变量可以拿到内部使用
var a1 = 10;
function aa(){
var a1 = 20;
var b1 = 30;
console.log(a1);
}
aa(); //20;
console.log(b1); //报错 b1 is not defined
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
飞机吃到函数,保持函数后的状态
将函数内部的变量变为全局变量 只需要去掉
var
就是==全局变量== (前面的值会被覆盖)
var a2 = 20;
function aa2(){
a2 = 100;
return a2;
}
var ab = aa2();
console.log(ab); // 100
1
2
3
4
5
6
7
2
3
4
5
6
7
# 作用域链
当声明一个函数时,局部作用域一级一级的向上请求数据
var a1 = 30;
function aa(){
var a1 = 40;
function dd(){
var a1 = 50;
return a1;
}
console.log(a1);
}
aa(); // 会一级一级的向上请求数据 如果a1=50不存在,就向上找,如果没有就undifin
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 闭包
外部函数读取内部函数的变量并一直保存变量
优点:形成独立的空间,并永久保存局部变量的值
缺点:闭包的局部变量不会被回收
var a1 = 20;
function fun1(){
var a1 = 100;
add=fuction(){
a1++;
}
square=fuction(){
a1 *= a1;
}
function f1(){
console.log(a1);
}
return f1();
}
var res = fun1();
res(); // res()=f1()=f1内代码
add();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18