JavaScript

JavaScript 知识量:26 - 101 - 483

9.2 函数的参数><

理解参数- 9.2.1 -

在JavaScript中,函数参数是用于接收在函数被调用时传递的值的变量。函数参数在函数定义时定义,并在函数执行时使用。

1. 参数传递方式:在JavaScript中,函数参数总是按值传递。这意味着当将一个变量作为参数传递给函数时,函数接收的是该变量的一个副本,而不是变量本身。这意味着函数内部对参数的修改不会影响到原始变量。

2. 函数的参数在内部表现为一个数组。当定义一个函数,并传递参数给它时,这些参数被存储为一个数组,通常被称为"arguments"对象。可以在函数内部通过这个arguments对象来访问所有的参数,而不需要明确地指定它们的名字。

以下是一个简单的例子:

function sum(a, b, c) {  
    console.log(arguments[0] + arguments[1] + arguments[2]);  
}  
  
sum(1, 2, 3);  // 输出9

在这个例子中,定义了一个名为sum的函数,它接受三个参数。当调用这个函数并传递1、2和3作为参数时,这些参数在函数内部被存储为arguments对象。可以通过在arguments对象上使用索引来访问这些参数,就像访问数组一样。在这个例子中,使用arguments[0]、arguments[1]和arguments[2]来分别访问第一个、第二个和第三个参数,并将它们相加。

值得注意的是,虽然arguments对象在行为上类似于数组,但并不是所有的数组方法都可以在arguments对象上使用。例如,不能使用arguments.push()或arguments.pop()来向arguments对象添加或删除元素。不过,可以使用arguments.length属性来获取arguments对象中的元素数量。

默认参数值- 9.2.2 -

在JavaScript中,可以使用默认参数值。这些默认值是当函数被调用时如果没有提供参数,或者提供的参数值为undefined、null、false、0、空字符串("")或NaN时所使用的值。

在ES6(ECMAScript 2015)及之后的版本中,JavaScript允许在函数声明中使用默认参数值。以下是如何在JavaScript中设置默认参数值的示例:

function greet(name = "World") {  
    console.log(`Hello, ${name}!`);  
}  
  
greet(); // 输出 "Hello, World!"  
greet("John"); // 输出 "Hello, John!"

在这个例子中,name参数有一个默认值 "World"。所以当调用greet()时,由于没有提供name参数,它的值将默认为"World"。

另一个示例,演示了如何在函数有多个参数时设置默认值:

function greet(greeting = "Hello", name = "World") {  
    console.log(`${greeting}, ${name}!`);  
}  
  
greet(); // 输出 "Hello, World!"  
greet("Hi"); // 输出 "Hi, World!"  
greet("Hi", "John"); // 输出 "Hi, John!"

在这个例子中,如果只调用greet(),那么greeting将默认为"Hello",name将默认为"World"。如果提供了greeting参数,但是没有提供name参数,那么name将默认为"World"。

箭头函数也可以设置参数的默认值,不过在只有一个参数时,就必须使用括号而不能省略了。示例如下:

const greet = (name = "World") => {  
    console.log(`Hello, ${name}!`);  
}  
  
greet(); // 输出 "Hello, World!"  
greet("John"); // 输出 "Hello, John!"

在这个例子中,如果没有给 greet 函数传递 name 参数,那么 name 的值就会是默认值 "World"。如果传递了 name 参数,那么 name 的值就是传递的参数值。

扩展参数- 9.2.3 -

在JavaScript中,有一种特殊的语法特性,叫做扩展参数(Rest Parameter)。

扩展参数允许在函数声明中将多个参数收集到一个数组中。这是通过在参数列表中使用三个点(...)加上一个参数名来实现的。这个参数名可以是任何合法的标识符,它将接收所有额外的参数,并将它们收集到该数组中。这样做的好处是可以处理任意数量的参数,使函数更加灵活。

例如,以下是一个使用扩展参数的示例:

function sum(...numbers) {  
    let total = 0;  
    for (let num of numbers) {  
        total += num;  
    }  
    return total;  
}  
  
console.log(sum(1, 2, 3)); // 输出: 6  
console.log(sum(4, 5, 6, 7)); // 输出: 22

在这个例子中,...numbers是一个扩展参数,它会将所有传递给函数的多余参数收集到一个名为numbers的数组中。然后,在函数体中使用for...of循环遍历numbers数组,并将每个元素加到total变量中。最后,函数返回total的值。

需要注意的是,扩展参数只能出现在函数参数列表的最后一个位置。如果还有其他普通参数,它们应该出现在扩展参数之前。