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 }

に渡すobjchange_xobj自体に変更が加えられましたが、にobj null渡して作成しようとするとchange_obj、objが変更されませんでした。change_obj_x私が期待したこともしませんでした。

これを説明し、関数に関するすべてを知るためのリンクをいくつか教えてください。

4

2 に答える 2

4

o次のような関数で何かを割り当てるとき

function change_obj(o) { o = null; }

パラメータを変更するのではなく、変数に代入するだけnullです。o変数は関数の外に存在しないため、何も起こりません。

対照的に、

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

パラメータ自体を変更します。パラメーターは参照によって渡されるため、xプロパティの値も関数の外部で変更されます。

functionfunction change_obj_x(o)では、これら 2 つの効果を組み合わせます。最初に、(あなたの を参照する) のxプロパティを変更し、次に に代入します。後者は影響しません。oobjnulloobj

于 2013-10-21T08:27:44.043 に答える