在JavaScript中,基本数据类型(如字符串、数字、布尔值、null、undefined)是通过值传递的,而对象(包括数组和函数)则是通过引用传递的。
当你将一个基本数据类型的变量赋值给另一个变量时,实际上是将该值的副本赋给了新变量。因此,改变新变量的值不会影响原变量的值。
let a = 10;
let b = a; // b是a的副本
b = 20;
console.log(a); // 输出10
console.log(b); // 输出20
当你将一个对象赋值给另一个变量时,实际上是将该对象的引用(内存地址)赋给了新变量。因此,通过新变量修改对象的属性会影响原对象。
let obj1 = { name: 'Alice' };
let obj2 = obj1; // obj2引用obj1的对象
obj2.name = 'Bob';
console.log(obj1.name); // 输出'Bob'
console.log(obj2.name); // 输出'Bob'
数组也是对象的一种,因此数组也是通过引用传递的。
let arr1 = [1, 2, 3];
let arr2 = arr1; // arr2引用arr1的数组
arr2.push(4);
console.log(arr1); // 输出[1, 2, 3, 4]
console.log(arr2); // 输出[1, 2, 3, 4]
函数也是对象,因此函数也是通过引用传递的。
function greet() {
console.log('Hello');
}
let func1 = greet;
let func2 = func1; // func2引用func1的函数
func2(); // 输出'Hello'
通过理解JavaScript中值传递和引用传递的区别,可以更好地控制数据的流动和修改,避免意外的副作用。
领取专属 10元无门槛券
手把手带您无忧上云