在 JavaScript 的世界里,函数就像是一个个小魔法师,它们能接收信息、处理信息,然后给出结果。而函数参数就像是魔法师手中的魔法道具,形参和实参则有着独特的传递规则,下面就让我们一起来揭开它们的神秘面纱。
形参,简单来说就是函数定义时声明的参数,它就像是一个占位符,告诉函数在被调用时会接收什么样的信息。而实参则是在调用函数时实际传递给函数的值。
让我们通过一个简单的例子来看看它们的区别:
// 定义一个函数,这里的 num1 和 num2 就是形参function add(num1, num2) {return num1 + num2;}// 调用函数,这里的 3 和 5 就是实参let result = add(3, 5);console.log(result); // 输出 8
在这个例子中,add 函数定义时的 num1 和 num2 是形参,当我们调用 add(3, 5) 时,3 和 5 作为实参传递给了函数。
在 JavaScript 中,基本数据类型(如 number、string、boolean 等)是按值传递的。这意味着当我们把一个基本数据类型的实参传递给函数时,函数内部接收到的是实参的一个副本,而不是实参本身。
function changeValue(num) {num = num + 10;return num;}let original = 5;let newNum = changeValue(original);console.log(original); // 输出 5,原始值没有改变console.log(newNum); // 输出 15
在这个例子中,original 的值并没有因为函数内部对 num 的修改而改变,因为 num 只是 original 的一个副本。
对于对象和数组,JavaScript 是按引用传递的。这意味着当我们把一个对象或数组作为实参传递给函数时,函数内部接收到的是该对象或数组的引用,而不是副本。
function changeObject(obj) {obj.name = 'New Name';}let myObject = { name: 'Old Name' };changeObject(myObject);console.log(myObject.name); // 输出 'New Name'
在这个例子中,函数内部对 obj 的修改实际上影响了 myObject,因为它们指向同一个对象。
| 数据类型 | 传递方式 | 说明 |
|---|---|---|
| 基本数据类型(如 number、string、boolean) | 按值传递 | 函数内部接收到的是实参的副本,修改不会影响原始值 |
| 对象和数组 | 按引用传递 | 函数内部接收到的是实参的引用,修改会影响原始对象或数组 |
通过对形参和实参传递规则的了解,我们可以更好地控制函数的行为,避免一些不必要的错误。在实际开发中,要时刻记住基本数据类型和引用类型的传递差异,这样才能让我们的 JavaScript 代码更加健壮和可靠。就像魔法师熟练掌握魔法道具的使用方法一样,我们也能熟练运用函数参数的传递规则,创造出更加精彩的代码魔法。