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

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

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

【问题讨论】:

    标签: javascript html oop


    【解决方案1】:

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

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

    【讨论】:

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

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

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

    • 号码
    • 字符串
    • 布尔值
    • undefined
    • null

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2013-05-03
        • 2013-01-21
        • 2021-06-01
        相关资源
        最近更新 更多