This question already has answers here:
Is JavaScript a pass-by-reference or pass-by-value language?
(32个答案)
Why this code references different result
(4个答案)
在10个月前关闭。
谁能解释我下面这段代码中发生了什么?为什么会这样工作?我期望变量
现在
然后,当您重新分配
分配时
如果您能够创建一个指针,它将如下所示:
...并且在重新分配后:
(32个答案)
Why this code references different result
(4个答案)
在10个月前关闭。
谁能解释我下面这段代码中发生了什么?为什么会这样工作?我期望变量
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?
最佳答案
因为JavaScript中没有指针。
刚开始时,您会遇到以下情况:
base ---+
|
v
{
cars ----+
} |
v
{
color: "blue"
brand: "Ford"
}
^
|
a -----------------+
现在
base.cars
和a
都指向同一个对象。然后,当您重新分配
base.cars
时,它将变为:base ---+
|
v
{
cars ---> function(){ ... }
}
{
color: "blue"
brand: "Ford"
}
^
|
a -----------------+
分配时
a
将继续指向base.cars
引用的对象。这样,即使重新分配了base.cars
,它也不会影响a
的值(和引用)。如果您能够创建一个指针,它将如下所示:
base ---+
|
v
{
cars ----+
} ^ |
| v
| {
| color: "blue"
| brand: "Ford"
| }
|
|
a --------+
...并且在重新分配后:
base ---+
|
v
{
cars ----> function(){ ... }
} ^
|
| {
| color: "blue"
| brand: "Ford"
| }
| |
| +--> Garbage collection
a --------+