ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript で変数を渡す: 値で渡しますか?_JavaScript のヒント

JavaScript で変数を渡す: 値で渡しますか?_JavaScript のヒント

WBOY
WBOYオリジナル
2016-05-16 18:10:31972ブラウズ

変数 A が変数 B に割り当てられると、スタック内の値が新しい変数に割り当てられたスペースにコピーされます。

どのように理解すればよいでしょうか?

コードをコピーします コードは次のとおりです。

var x = y = 1; >y = 2;
alert(x);

x の値は何ですか?

コードをコピーします コードは次のとおりです。
var obj = {}; var sub = {};
sub['id'] = 3;
sub['id'] = 4; sub'] ['id']);


obj['sub']['id'] の値は何ですか?本当にあなたの期待に応えられるのでしょうか?

2 つのコードをそれぞれ実行したところ、プログラムの最初の部分の x の値は変化しませんでしたが、2 番目の部分の obj['sub']['id'] の値が変化したことがわかりました。のプログラムが変更されました。これは代入操作でもあり、別のコピーの値も変更します。なぜプログラムのセクションのソース変数は変更されないのですか?この転送は値によるものですか、それとも参照によるものですか?

その答えは、Li Songfeng 訳『JavaScript Advanced Programming Second Edition』に記載されています。
最初の 2 つの例では、A の値が実際に B にコピーされます。違いは、最初の例では A の値が int 型の 1 であるのに対し、2 番目の例では A の値が int 型であることです。コピー後、最初の例の B の値は新しい int になり、その値は 1 になります。一方、2 番目の例では、B の値は新しいアドレス ポインターになり、その値はこのオブジェクトのアドレス。

次の例は理解に役立ちます




コードをコピーします
コードは次のとおりです: function setName(obj){ obj.name = "test1";
obj = {};
obj.name = "test2"; = new Object() ;
setName(person);


ご覧のとおり、setName 関数は name 属性を変更するために呼び出されます。変数 person.name 値は変更されていません。これは、関数内で obj が指すアドレスが変更されるため、このアドレスの name 属性を変更しても、元のアドレスの name 属性には影響しません。別の側面から見ると、JavaScript が値によって渡されることも確認されます。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。