JS中的值引用和地址引用指的是,在JS中,非基本类型数据(如对象、数组等)的赋值方式存在两种:值传递和引用传递。当使用值传递时,实际上是将变量的值(即数据内容)直接复制给接收变量;而当使用引用传递时,则是将变量的地址(指针)复制给接收变量,两者指向同一块内存空间,从而共享同一份数据。这里通过两个实例来详细讲解这两种传递方式的异同点。
实例1:值传递
假设有两个对象a和b,对象a包含一个属性name,如下所示:
const a = {name: 'Tom'}
当我们将对象a的值赋给变量b时,是将a中的数据内容直接复制一份(副本)给b,两个变量之间不再有任何联系:
const b = a;
这时,如果我们改变a对象的name属性:
a.name = 'Jerry';
那么b对象的name属性并没有发生改变:
console.log(b.name); // Tom
这个实例中,变量b并没有和变量a共享同一份数据,而是得到了a对象的值的一份副本,因此改变a并不会影响到b。
实例2:引用传递
假设我们定义了一个数组a:
const a = [1, 2, 3];
而我们将这个数组a赋值给另一个数组变量b:
const b = a;
这时候,变量a和b指向同一个数组对象,即它们引用了同一块内存空间,因此对于数组中的元素的修改,变量a和b都会受到影响。
例如我们修改了数组a中第一个元素的值:
a[0] = 100;
那么数组b中的第一个元素也会跟着修改:
console.log(b[0]); // 100
这也是JS中引用传递的特点之一:多个变量引用同一个对象,会共享同一块内存空间。
综上所述,JS中的值引用和地址引用实际上是指JS中赋值方式存在的两种传递机制:值传递和引用传递。其中,值传递是直接将变量的数据内容复制给接收变量,两者之间不会共享同一份数据;而引用传递则是将变量的地址复制给接收变量,两者指向同一块内存空间,因此共享同一份数据。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js中值引用和地址引用实例分析 - Python技术站