如何理解在js中访问变量有按值和按引用两种方式?

4 min read

在JavaScript中,访问变量时可以通过按值或者按引用两种方式。

按值访问变量指的是直接访问变量的值。当一个变量被赋值时,实际上是将该值复制一份到一个新的内存空间中。按值传递的变量,只是传递了这个值的一个副本,对该值所做的任何更改都不会影响原始值。JavaScript的基本数据类型和简单的JavaScript对象都是按值传递的变量。例如:

let x = 10;
let y = x;
y = 20;
console.log(x); // 输出 10,原始值没有变化

按引用访问变量表示的是访问变量所在的内存地址,即访问指向该对象内存地址的指针。在对按引用传递的变量进行操作时,它们的原始值也会受到影响,因为它们仅仅是指向原始数据所存储内存地址的指针。JavaScript的复杂数据类型,例如数组和对象,实际上是按引用传递的变量。例如:

let arr1 = ['a', 'b', 'c'];
let arr2 = arr1;
arr2.push('d');
console.log(arr1); // 输出 ['a', 'b', 'c', 'd'],原始数组发生了变化

在JavaScript中,理解按值和按引用访问变量之间的区别以及哪些变量是按值传递的,哪些是按引用传递的非常重要。