在 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 代码更加健壮和可靠。就像魔法师熟练掌握魔法道具的使用方法一样,我们也能熟练运用函数参数的传递规则,创造出更加精彩的代码魔法。