Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.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对象的平均值_Javascript_Pass By Reference_Pass By Value - Fatal编程技术网

什么是';值是一个引用';JavaScript对象的平均值

什么是';值是一个引用';JavaScript对象的平均值,javascript,pass-by-reference,pass-by-value,Javascript,Pass By Reference,Pass By Value,我试图理解JavaScript中变量和对象的传递,但遇到了一些问题 据解释,JavaScript对象是通过值传递的,但值本身是一个引用。虽然我理解在那一页给出的例子中发生了什么,但我仍然不明白为什么。谁能解释一下“价值本身就是一个参照物”是什么意思 据解释,JavaScript对象是通过值传递的,但值本身是一个引用 这是相当令人困惑的措辞。它们的意思是,当对象被传递给函数时,指向对象的引用值被传递,而不是实际的对象。一些语言有“按引用传递”函数参数的概念,这意味着当调用函数并通过引用传入变量时,

我试图理解JavaScript中变量和对象的传递,但遇到了一些问题

据解释,JavaScript对象是通过值传递的,但值本身是一个引用。虽然我理解在那一页给出的例子中发生了什么,但我仍然不明白为什么。谁能解释一下“价值本身就是一个参照物”是什么意思

据解释,JavaScript对象是通过值传递的,但值本身是一个引用

这是相当令人困惑的措辞。它们的意思是,当对象被传递给函数时,指向对象的引用值被传递,而不是实际的对象。

一些语言有“按引用传递”函数参数的概念,这意味着当调用函数并通过引用传入变量时,函数可以修改原始变量以保存其他值-它具有对原始变量的引用

使用“按值传递”时,当调用函数并传入变量时,函数仅获取值,因此无法更改传入的原始变量

JS只有“按值传递”,但当您将对象作为参数传递时,“值”是对原始对象的引用,因此函数可以修改、创建或删除该对象的属性,但函数不能修改原始变量以引用其他对象或值

例如:

function changeObj(someObj) {
    someObj.a = 1000;
    someObj.c = "test";

    someObj = { "x" : 5 };
    console.log(someObj);   // { "x" : 5 }
}

var o = { "a" : 1, "b" : 2 };
changeObj(o);
console.log(o);   // { "a" : 1000, "b" : 2, "c" : "test" }

我展示的代码创建了一个变量
o
,它引用了一个具有
a
b
属性的对象。然后调用函数
changeObj
,并传入
o
。函数更改
a
属性的值并创建新的
c
属性-函数正在修改变量
o
引用的同一对象,因为它引用了该对象。但随后该函数将
someObj
赋值为一个全新的对象。这根本不影响
o
,因为函数只引用了
o
所指向的对象,它无法访问
o
变量本身。

像Java、Python和许多其他语言一样,在JavaScript中,对象不是值

这意味着,当你计算一个表达式时,你从中得到的值要么是一个基元,要么是一个引用(引用是指向一个对象的指针)。创建对象时,该表达式的计算结果为引用。当访问对象的字段或调用对象的方法时,左侧的对象是引用。基本上,对对象所做的任何操作都必须通过对对象的引用来完成。没有直接处理对象的语法

不能有一个值“变量”是一个对象(不像C++,在这里你可以同时拥有一个变量,它的值是一个对象,而变量的值是指向一个对象的指针);只能有一个值为指向对象的引用的变量

这一点很明显,当您指定一个变量时,永远不会创建一个新对象。指定引用时,指定的变量具有原始引用值的副本,因此指向与原始引用相同的对象。您不能将任何内容放入变量中,从而导致将其赋值以创建新对象


所以如果有人说“将对象传递给函数”,我会说,不,你不能传递对象,因为对象不是值。您必须传递对对象的引用。与赋值一样,传递引用时,会复制引用的值。JavaScript总是按值传递。

。。。这个引用是通过值传递的。那么,在这种情况下,它与刚才通过引用传递的对象有什么不同?谢谢。我想我现在明白了。想象一个物体参考,比如车牌号。如果我告诉你你在一张纸上写的我的汽车号码,你可以找到我的汽车并驾驶它。如果你更改纸上的号码,它将引用另一辆车,但我的车将保留其原始号码。Dupe:@aquinas,我在问题中提到的链接与你所说的相同。我的问题是关于那一页的,所以我相信它不是重复的!:)不客气。我添加了一个(我希望)更清楚的例子。