理解 javascript 中的函数

问题描述 投票:0回答:2

我玩过 javascript,就是这样:

> var obj = new Object();

> obj
{}
> obj.x = 0;
0
> function change_x(o) { o.x = o.x + 1; }

> change_x(obj);

> obj
{ x: 1 }
> function change_obj(o) { o = null; }

> change_obj(obj);

> obj
{ x: 1 }

function change_obj_x(o) { console.log(o); o.x = o.x + 1; o = null; console.log(o); }

> change_x(obj)

> change_obj_x(obj);
{ x: 2 }
null

> obj
{ x: 3 }

当我将

obj
传递给
change_x
时,它对 obj 本身进行了更改,但是当我尝试通过将其传递给
obj null
来制作
change_obj
时,它并没有更改 obj。
change_obj_x
也没有达到我的预期。

请对此进行解释并给我一些链接以了解有关函数的所有内容。

javascript function parameter-passing
2个回答
3
投票

当您在

 中的函数中将某些内容分配给 
o

function change_obj(o) { o = null; }

您不更改参数,只需将

null
分配给变量即可。由于函数外部不存在
o
变量,因此不会发生任何事情。

相比之下,

function change_x(o) { o.x = o.x + 1; }

更改参数本身。由于参数是通过引用传递的,因此

x
属性的值也会在函数外部发生更改。

在您的函数

function change_obj_x(o)
中,您可以结合这两种效果。首先,您更改
x
o
属性(它引用您的
obj
),然后将
null
分配给
o
。后者不影响
obj


0
投票

参见功能

If you pass an object (i.e. a non-primitive value, such as Array or a user-defined object) as a parameter, and the function changes the object's properties, that change is visible outside the function

Note that assigning a new object to the parameter will not have any effect outside the function, because this is changing the value of the parameter rather than the value of one of the object's properties

有一个很好的解释:

Imagine your house is white and you give someone a copy of your address and say, "paint the house at this address pink." You will come home to a pink house.

这就是你在

所做的
> function change_x(o) { o.x = o.x + 1; }
> change_x(obj);

还有

Imagine you give someone a copy of your address and you tell them, "Change this to 1400 Pennsylvania Ave, Washington, DC." Will you now reside in the White House? No. Changing a copy of your address in no way changes your residence.

就是这样

> function change_obj(o) { o = null; }
> change_obj(obj);

做。

© www.soinside.com 2019 - 2024. All rights reserved.