var o = {};
(function(x){x=null})(o); //o is NOT null after this statement
(function(x){x.foo = "foo"; x.bar = "bar";})(o) //o has properties foo and bar after this statement
将对象o传递给函数时会发生什么?第一个功能使得它似乎没有通过;第二个函数使得它似乎被传递
答案 0 :(得分:5)
第1行:创建一个对象。对它的引用传递给o
。
第2行:调用一个函数。对象的引用作为参数传递。然后使用x
覆盖引用(在null
中)(不触及对象本身或仍然分配给o
的引用)。
第3行:调用一个函数。对象的引用作为参数传递。 foo
和bar
属性将添加到对象并分配值。
答案 1 :(得分:4)
(function(x){
x=null
})(o);
x
“指向”o
,但您刚刚指定x
指向另一件事,null
因此不会更改o
。
(function(x){
x.foo = "foo";
x.bar = "bar";
})(o);
在此代码中,您正在更改foo
所指向的属性(添加bar
和x
),即o
。此更改将反映到o
。