1

変数の交換を理解するのに苦労しています。実際にそれを行う方法を説明する多くの役立つスレッドがありますが、私はそれを理解するのに苦労しています. 私が話している例は次のとおりです。

var a = 1;
    b = 2;
    c = a;
a = b;
b = c;

私の(非常に基本的な)理解では、平易な英語で次のように読みました。宣言ごとの変数cは、変数aが指しているものを保持します。宣言の後にa = bを代入するので、次の代入でbに値 2 を保持させるべきではないでしょうか ( cは、 bに代入したばかりの a を指しているため)。

4

3 に答える 3

7

JavaScript は、による呼び出し/割り当て(より具体的には、共有による呼び出し/割り当て) です。つまり、変数を別の変数に割り当てると、変数の値がコピーされます。変数に新しい値を割り当てても、別の変数の値が変更されることはありません。それらの間に暗黙のリンクはありません。

もう少し視覚的に:bが値 を保持すると仮定すると、 のva = b

b -> v
a -> v

a -> b -> vあなたは私たちが代わりに持っていると思っているようですが、そうではありません

あなたの例では:

c = a; // c now holds the value 1
a = b; // a now holds the value 2
b = c; // b now holds the value 1
于 2015-01-05T17:06:56.490 に答える
1

いいえ、JavaScript では、ある変数の値を別の変数に割り当てると、値のコピーが割り当てられます。したがって、その後

c = a;

変数「c」には、「a」にある値のコピーがあります。その後、変数 "b" の値のコピーを "a" に代入しても、"c" の値には影響しません。

于 2015-01-05T17:07:00.227 に答える
1

代入演算子は、右側の値を左側の変数にコピーします。変数への参照は作成しません。

ステートメントc = aが実行されると、 の値aはまだ1であるため、 の値は にcなり1ます。

コード内の他の場所の値を変更しないcため、 に到達b = cしても、値は のまま1です。

于 2015-01-05T17:07:10.257 に答える