Tel*_*irw 5 javascript reference object
谁能解释一下下面这段代码中发生了什么?为什么会这样呢?我预计变量a
也会改变......
var base = {
cars: {
color: "blue",
brand: "Ford"
}
}
var a = base.cars;
base.cars = function () { console.log("example method") }
console.log(base) // changed to method
console.log(a) // still is object - why?
Run Code Online (Sandbox Code Playgroud)
因为JavaScript中没有指针。
一开始,你有这样的东西:
base ---+
|
v
{
cars ----+
} |
v
{
color: "blue"
brand: "Ford"
}
^
|
a -----------------+
Run Code Online (Sandbox Code Playgroud)
现在base.cars
和都a
指向同一个对象。
然后,当您重新分配 时base.cars
,它变为:
base ---+
|
v
{
cars ---> function(){ ... }
}
{
color: "blue"
brand: "Ford"
}
^
|
a -----------------+
Run Code Online (Sandbox Code Playgroud)
a
将继续指向base.cars
赋值时引用的对象。然后,即使base.cars
重新分配,也不会影响 的值(和引用)a
。
如果您能够创建一个指针,它将如下所示:
base ---+
|
v
{
cars ----+
} ^ |
| v
| {
| color: "blue"
| brand: "Ford"
| }
|
|
a --------+
Run Code Online (Sandbox Code Playgroud)
...重新分配后:
base ---+
|
v
{
cars ----> function(){ ... }
} ^
|
| {
| color: "blue"
| brand: "Ford"
| }
| |
| +--> Garbage collection
a --------+
Run Code Online (Sandbox Code Playgroud)