gpt4 book ai didi

javascript - 按值传递的函数参数

转载 作者:行者123 更新时间:2023-11-30 08:49:52 25 4
gpt4 key购买 nike

我读到在 JavaScript 中,出现了一个常见的混淆点,因为基元变量按值传递,对象变量按引用传递,而在函数参数中,基元和引用都按值传递。

在我的修补过程中,我编写了以下代码,但我无法理解它。

> function setName2(obj) {
... obj.name="matt";
... obj = new Object();
... obj.name="obama";
... }

如果我设置

var person = new Object();
person.name = "michelle";

然后运行

> setName2(person);

我明白了

> person.name;
'matt'

这是有道理的,因为创建的新对象是指向本地对象的指针,因此不会影响全局“人”的属性。

但是,如果我先设置

 var obj = new Object();
obj.name = "michelle";

然后运行

  > setName2(obj);

?

我得到了相同的结果。这是否意味着编译器将同名的两个变量(obj global 和 obj local)识别为对堆内不同位置的引用,每个变量都有一些不同的指针关联,或者对这种现象有不同的解释?

最佳答案

JavaScript 没有传递引用; 一切都是按值传递的。但是,某些值本身就是对对象的引用。这种区别(按引用传递与引用传递)会导致很多混淆。

清理问题的示例:

function f(o) { ... }
var obj = { foo: 42 };
f(obj);

无论您在 f 中做什么,obj 将始终引用同一个对象,因为参数不是通过引用传递。但是,复制到 o 中的值 obj 本身就是对对象的引用。这就是为什么在函数返回后对 o 所做的任何属性更改都将在 obj 上可见。

关于javascript - 按值传递的函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18801429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com