5

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

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

4

3 回答 3

8

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

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

于 2013-02-23T18:21:31.017 回答
5

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

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

  • 数字
  • 细绳
  • 布尔值
  • undefined
  • null

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

于 2013-02-23T18:20:42.083 回答
1

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

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

于 2013-02-23T18:25:07.867 回答