Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么变量不会在Java脚本中自动更新?(范围?)_Javascript_Variables - Fatal编程技术网

Javascript 为什么变量不会在Java脚本中自动更新?(范围?)

Javascript 为什么变量不会在Java脚本中自动更新?(范围?),javascript,variables,Javascript,Variables,我有以下代码: var obj = { car: "volvo", speed: 20 }; var x = obj.speed; obj.speed = 500; console.log(x); console.log(obj.speed); obj.speed = 1000; var y = obj.speed; console.log(y); 在您将x记录到console时,人们会认为x是500,但它仍然是20。Console.log(对象速度)结果为500 你能告诉

我有以下代码:

var obj = {
    car: "volvo",
    speed: 20
};

var x = obj.speed;
obj.speed = 500;
console.log(x);
console.log(obj.speed);

obj.speed = 1000;
var y = obj.speed;
console.log(y);
在您将x记录到console时,人们会认为x是500,但它仍然是20。Console.log(对象速度)结果为500

你能告诉我为什么会这样吗

我知道如果我交换它们的位置:var x声明和obj.speed=500,它将指向500。就像y变量一样


但是为什么呢?在记录x变量之前,代码没有检查它的最后一个值吗?

当您将
x
分配给
obj.speed
时,它与将值分配给原始变量类似

如果将
obj
的值赋给变量
y
,则该变量将被更新,因为它将引用相同的内存位置

var obj={
汽车:“沃尔沃”,
速度:20
};
//对象是引用数据类型。
//但是你在计算obj.speed的值,这是x的基本值
//因此,即使更改obj.speed的值,x的值也不会更改。
var x=目标速度;
目标速度=500;
控制台日志(x);
//但如果将object的值赋给另一个变量'y`
//现在,y将指向与obj相同的内存位置
//如果更新obj,则y的值也将更新
var y=obj;
目标速度=1000;
控制台日志(y);

控制台日志(obj)您复制变量的值,而不是引用“一个人期望x为500”-不,一个人不会。您将值
20
分配给一个变量,然后您将更新一个不同的变量…不,您将值分配给了
x
而不是一个参考类型,这与
var x=20完全相同参见示例。