あなたのコードで:
> function setName(obj) {
呼び出しの最初の引数の値は、ローカル変数objに割り当てられます。オブジェクトが渡された場合、objの値はそのオブジェクトへの参照です。
> obj.name = "raziq";
これにより、値 "raziq" がobjに渡されたオブジェクトのnameプロパティに割り当てられます。nameプロパティが存在しない場合は、作成されます。
> obj = new Object();
これにより、新しいオブジェクト参照がobjの値として割り当てられるため、関数に渡されたオブジェクトは参照されなくなります。
> obj.name = "abdul";
これにより、値 "abdul" がobjによって参照されるオブジェクト(上記の行で作成および割り当てられた新しいオブジェクト) のnameプロパティ (存在しない場合は作成) に割り当てられます。
このオブジェクトには他に参照がないため、関数が終了するとすぐにガベージ コレクションで使用できるようになります。
> }
>
> var person = new Object();
新しいオブジェクトを作成し、それを変数personに割り当てます。personの値は、新しいオブジェクトへの参照です。
> setName(person);
setNameを呼び出し、上記の行で作成されたオブジェクトを渡します。この関数は、 raziqをオブジェクトのnameプロパティに割り当てます (上記を参照)。
> alert(person.name); //still yields raziq
上記で作成され、 personに割り当てられたオブジェクトのnameプロパティの値を警告します。raziqが値として割り当てられているため、それが返されます。
関数で新しいオブジェクトが作成され、割り当てステートメントでnameプロパティが作成されますが、オブジェクトはどこにも割り当てられていないか、関数から返されていないことに注意してください。
obj = new Object();
事実上何もしません。
次のように書く方がより一般的であることに注意してください。
obj = {};
前の行とまったく同じ結果が得られますが、入力する必要が少なく、より広く使用されているため、(わずかに) 読みやすく、維持しやすい可能性があります。