一、基础类型
如果 A 函数中声明的变量是一个基本数据类型(如 string
、number
或 boolean
),并将其传递给 B 函数,那么 A 和 B 中的变量不会相互影响。因为基本数据类型是按值传递的,所以 B 函数接收到的只是 A 函数中变量的一个副本。下面是一个例子:
function A() {
let x = 10;
B(x); // 传递x的值
console.log(x); // 输出:10,不受B函数中操作的影响
}
function B(y) {
y = y + 5;
console.log(y); // 输出:15,只修改了B函数内部的副本
}
A(); // 调用A函数
在上面的例子中,B 函数中对 y
的修改不会影响 A 函数中的 x
。
二、对象类型
然而,如果 A 函数中声明的变量是一个对象(如数组、对象字面量等),并将其传递给 B 函数,那么 A 和 B 中的变量会相互影响。因为对象是按引用传递的,所以 B 函数接收到的实际上是对 A 函数中对象的引用。下面是一个例子:
function A() {
let obj = { value: 10 };
B(obj); // 传递obj的引用
console.log(obj.value); // 输出:20,因为B函数修改了obj的属性
}
function B(objRef) {
objRef.value += 10; // 修改obj的属性
console.log(objRef.value); // 输出:20,修改了obj的引用指向的对象
}
A(); // 调用A函数
在这个例子中,B 函数中对 objRef.value
的修改会反映到 A 函数中的 obj
上,因为它们都引用同一个对象。
总结来说,如果传递的是基本数据类型,则 A 和 B 中的变量不会相互影响;如果传递的是对象,则 A 和 B 中的变量会相互影响,因为它们操作的是同一个对象的引用。