函数参数及返回值

# 1.形参和实参

// 形参:形式上占位的参数,用于占位 a,b 就是形参
function test(a, b) {
    console.log(a, b); // 1 2

    // arguments:函数的所有实参
    console.log(arguments); // [1, 2]
    // arguments.length:实参个数
    console.log(arguments.length); // 2
}

// 实参:实际传入的参数
test(1, 2);
// 函数名.length:形参个数
console.log(test.length); // 2

总结:

  • 形参可以有很多个,实参不一定等于形参。
  • 给函数传递实参的时候要与实参一一对应。

# 2.默认参数

// 初始化参数:默认值:undefined
function test(a = 1, b) {
    console.log(a); // 1
    console.log(b); // 2
}
test(undefined, 2);

# 3.arguments 映射

  • arguments是一个伪数组,是函数天生自带的属性,用于存放参数。
// 函数的映射与返回
function test(a, b) {
    // 函数内部能修改已经定义的实参值
    a = 3;
    console.log(arguments[0]); // 3
    // 注意a与arguments[0]不是一个东西,但是存在映射关系,
    // 函数内部认为对应值是一样的

    // 函数内部不能修改未被定义的实参值
    b = 3;
    console.log(arguments[1]); // undefined

    // 如果不写return,系统会自动添加一个this
    return; //作用:终止函数执行、返回一个值
}
test(1);

# 4.arguments使用

  • arguments 中保存着函数的参数。
    function test() {
       var a = 0 ;
       for(let i=0 ; i<arguments.length; i++) {
            a+= arguments[i];
        } 
        return a;
    }
    var res = test(1,2,3,4,5);
    console.log(res); // 15

# 5.访问全局变量和局部变量

  • 全局变量:定义在函数外部的变量,称为全局变量。通过作用域链即可访问到(作用域链后面总结)
  • 局部变量:函数里面定义的变量是局部变量。(函数的参数也是局部变量)
  • 全局变量和局部变量同名情况下:在函数内部,变量值全部指向局部变量。
// 函数内部可以访问并修改函数外部的变量
// 函数外部不能访问到函数内部的变量
var a = 1; // 全局变量
function test1() {
    var b = 1; // 局部变量
    console.log(a); // 1

    function test2() {
        var c = 3; // 局部变量
        console.log(b); // 1

        b = 2;
    }
    test2();
    console.log(b); // 2
    console.log(c); // ReferenceError: c is not defined
}
test1();
console.log(b); // ReferenceError: b is not defined

TIP

简单提及下作用域的概念:在函数内部,当我们访问一个变量的时候,这个变量既不是用var声明的也不是函数的参数,那么我们就到函数的父作用域上去找这个变量, 如果父作用域也不存在,就继续向上查找,直到找到window。这种向上寻找的机制被成为作用域链。

# 6.返回值

  • return 是返回的意思,给函数一个返回值和中断函数。
  • return 关键字可以返回一个结果。
  • 如果函数没有return,打印函数的结果就是undefined。
Last Updated: 12/7/2020, 3:08:32 PM