js中函数的默认参数用法和解析
Author: 图恩Category: 编程开发Views: 621Published: 2022-04-07 **Article Class: _2rhmJa**
---
**1. Parameters with Default Values**
In function definitions, parameters can be assigned default values. When actual arguments are provided, they override the default values. If no arguments are given or the specified argument is `undefined`, the formal parameter will use the default value. For example:
```javascript
function getNum(num1, num2 = 5) {
return num1 + num2;
}
console.log(getNum(1)); // 6
console.log(getNum(1, 1)); // 2
console.log(getNum(1, undefined)); // 6
```
---
**2. Default Value Expressions**
Function parameters can also have default values that are expressions, not just simple values. For instance:
```javascript
let value = 1;
function getValue() {
return value++;
}
function add(sum1, sum2 = getValue()) {
return sum1 + sum2;
}
console.log(add(1, 1)); // 2
console.log(add(1)); // 2
console.log(add(1)); // 3
```
In this code, when `add()` is called without a second argument, it invokes `getValue()` to retrieve the default value. Since `getValue()` returns a dynamic value, each call to `sum2` uses a different value for computation.
---
**3. Temporal Dead Zone in Default Parameters**
Function parameters can assign values from preceding parameters as defaults for subsequent ones. For example:
```javascript
function add(sum1, sum2 = sum1) {
return sum1 + sum2;
}
console.log(add(1)); // 2
```
Here, `sum1` is used as the default for `sum2`. However, reversing this—using a later parameter as a default for an earlier one—leads to a **temporal dead zone** error. For example:
```javascript
function add(sum1 = sum2, sum2) {
return sum1 + sum2;
}
console.log(add(undefined, 1)); // Error
```
The error occurs because `sum2` is not defined when `sum1` is assigned its value. This is known as the **temporal dead zone**.
---
**4. Rest Parameters**
Rest parameters are designed to replace the `arguments` object in JavaScript. They are defined using `...` and a parameter name, collecting all provided arguments into an array. For example:
```javascript
function add(sum1, ...sum) {
return sum;
}
console.log(add(...[1, 2, 4, 5])); // [2, 4, 5]
```
The first argument is assigned to `sum1`, and the rest are collected into the `sum` array.
---
**Limitations of Rest Parameters**
1. A function can have **only one rest parameter**, and it must be placed at the end.
2. Rest parameters **cannot be used in object literal setters** (since object literals' setters are limited to single parameters).
Example:
```javascript
function add(...sum, sum1) {
return sum;
}
console.log(add(1, 2, 4, 5)); // Syntax error
let obj = {
set name(...value) { // Syntax error
console.log(value);
}
};
```
---
**Key Points**
- Rest parameters are used to capture multiple arguments into an array.
- They must be placed at the end of a function and cannot be nested.
- The **temporal dead zone** occurs when a later parameter is assigned a value from an earlier one, leading to undefined behavior.