JavaScript 是按引用传递还是按值传递? [复制]

Posted

技术标签:

【中文标题】JavaScript 是按引用传递还是按值传递? [复制]【英文标题】:Is JavaScript pass-by-reference or pass-by-value? [duplicate] 【发布时间】:2013-02-09 05:39:45 【问题描述】:

javascript 语言是按引用传递还是按值传递语言?

原始类型与对象的区别也不同吗?

【问题讨论】:

【参考方案1】:

它实际上使用了一个名为call by sharing的评估策略。

所有类型都按值传递。没有传递引用,否则您将能够修改在函数调用站点声明的变量的内容。通常人们说在 JS 中对象是通过引用传递的。它们实际上是通过共享传递的,这意味着您可以修改对象的属性,并且这些更改对于持有对该对象的引用的人是可见的,但引用本身是不可修改的。

【讨论】:

这类似于说您获得了一个指向对象的指针,然后您可以从当前范围修改该对象的属性,但是如果您尝试重新分配对象的值,在内部,您只是在重置指针。【参考方案2】:

对象通过引用传递,而基元通过值传递。

请注意,原始值包括以下内容:

号码 字符串 布尔值 undefined null

您可以在MDN on Functions找到更多详细信息。

【讨论】:

【参考方案3】:

除了原语之外的所有东西都是通过引用传递的。 JavaScript 中几乎所有的东西都是一个对象。 正如 Sirko 所说,对象是通过引用传递的。

所以函数/数组/对象都是通过引用传递的,无论您是在谈论附加到 var 的根对象,还是在谈论对象的属性/方法,链接 3 个点深,或者您是谈论数组中的对象,作为对象的属性,在对象数组中......

【讨论】:

以上是关于JavaScript 是按引用传递还是按值传递? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

javascript传递参数如果是object的话,是按值传递还是按引用传递?

java中的参数传递是按引用传递还是按值传递

js传参是按值传递还是按引用传递?

Ruby 是按值传递还是按引用传递? [复制]

PHP 变量是按值传递还是按引用传递?

JS基础类型和对象,分别是按值传递还是按引用传递?