var a = [1,2];
var b = [1,2,a];
a=[3];
打印b //[1,2,[1,2]]
第一个问题:b为什么没有变?
var a = [1,2];
var b = [1,2,a];
a[0]=3;
打印b //[1,2,[3,2]]
第二个问题:b为什么变了?
诚问;麻烦说的通俗易懂些
var a = [1,2];
var b = [1,2,a];
a=[3];
打印b //[1,2,[1,2]]
第一个问题:b为什么没有变?
var a = [1,2];
var b = [1,2,a];
a[0]=3;
打印b //[1,2,[3,2]]
第二个问题:b为什么变了?
诚问;麻烦说的通俗易懂些
我的理解如下,求大神解释更底层的原理~
{
let a = [1,2]; //a的内存指向[1,2]
let b = [1,2,a]; // b的内存指向[1,2,[1,2]]
a = [3]; //改变内存指向 指向[3]
console.log(b);//现在的b还在第二行代码这里啊
}
{
let a = [1,2];
let b = [1,2,a];
a[0] = 3; //改变内存中的内容 简而言之 就是赋值操作
console.log(b);
}
你搞清楚传值和传引用的问题就可以了,数组是对象,传的是引用。
第一个问题:
首先var a = [1,2];中的数组[1,2]已经在内存中了,
a得到它的引用地址,此时b再引用a,
相当于得到[1,2]的地址放到b[3]的位置,
之后再把数组[3]的引用地址传给a,此时只是数组[3]的地址传给a,并不会改变原来数组[1,2]的值
第二个问题:
明白数字时常量,传的是值,数组是对象,传的是引用 第二问题就解决了
[1,2,a]中的a是数组,获得的是数组[1,2]的引用,
此时赋值 a[0]=3;相当于把数组[1,2]的第一个元素赋值为3,是传值,相当于更改对象的值
而[1,2,a]中的a仅仅是获得[1,2]的引用地址,引用地址里的值改变了,所以[1,2,a]也跟着改变了
13 回答12.8k 阅读
7 回答1.9k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
6 回答897 阅读✓ 已解决
6 回答1.1k 阅读
2 回答1.3k 阅读✓ 已解决
首先,数组是引用类型的值,意思就是数组名是指向内存地址的一个指针。
所以a是数组的一个指针,a重新赋值是改变了a的指向,b也是一个指针对吧,它指向的就是[1, 2, // a指向的那个数组,即[1, 2]]
a只是更改了指向,没有更改原来那个指向的内容。
但是a[0]就不一样了,它是修改了内存地址的内容。
手机打的…可能体验比较差,但是有问题可以继续问我~