我正在阅读,在 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)识别为对堆内不同位置的引用,每个变量都有一些不同的指针关联,还是对这种现象有不同的解释?