05function.md

goer ... 2022-01-05 Javascript
  • Javascript
大约 2 分钟

函数

[toc]

# 函数

function:一个功能和方法.

匿名函数(回调函数:调用一次)和名称函数(可以多次调用)

// 语法
function 函数名(参数...){
    // 执行代码
    return 函数执行的结果
}
1
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

形参:形式上的参数,函数声明后括号的变量

实参:实际传入的参数,调用传入的变量

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

如果有些值是一直是一样的,默认的这种

给形参加默认值,如果不传参,就使用默认值,只能从最后一个加着过来

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
# 递归函数

函数内部调用本函数的功能(需要一个判断点)

// 递归函数   累加
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
# 函数作用域

函数内部的变量叫局部变量,不能拿到函数外部使用

函数外部的变量叫全局变量,函数外部的变量可以拿到内部使用

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

飞机吃到函数,保持函数后的状态

将函数内部的变量变为全局变量 只需要去掉var 就是==全局变量== (前面的值会被覆盖)

var a2 = 20;
function aa2(){
    a2 = 100;
   	return a2;
}
var ab = aa2();
console.log(ab); // 100
1
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
# 闭包

外部函数读取内部函数的变量并一直保存变量

优点:形成独立的空间,并永久保存局部变量的值

缺点:闭包的局部变量不会被回收

闭包 (opens new window)

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