js中函数的默认参数用法和解析

**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.