2015-01-05 1 views
1

У меня возникли трудности с пониманием замены переменных. Есть много полезных тем, объясняющих, как на самом деле это делать, но у меня возникают трудности с пониманием этого. Например, я говорю о:Понимание основных понятий переменной

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

В моей (очень простой) понимания я прочитал, что в простом английском языке, как: переменная с в декларации выполняется независимо от переменной указывает на. Так как мы назначаем а = Ь после объявления, не следует следующее задание сделать б удерживать значение 2 (потому что с наведен на , который мы только что назначен б)?

+0

Переменная 'c' имеет то же значение, что и' a'. Это не ссылки. Постскриптум 'b' и' c' объявляются * без * 'var'. Вы хотите иметь «var a = 1, b = 2, c = a;». Обратите внимание на запятые. –

+0

Спасибо, если бы я заплатил больше внимания, я бы увидел это с декларацией. Я предполагаю, что это немного ловушка, которую JS принимает, тем не менее. – morph

ответ

7

JavaScript является call/assign by value (точнее, call/assign by sharing) I.e. когда вы назначаете переменную другой переменной, копируется значение переменной. Присвоение нового значения переменной never изменяет значение другой переменной. Между ними нет неявной связи.

Чуть более наглядными: Если предположить, что b имеет значение v, то после a = 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 
+4

Если это простой тип, а не объекты (и массивы). –

+0

@ Mörre неверен. Значения всегда копируются. – Pointy

+2

Нет, это относится ко всем типам. В случае объектов значение, если ссылка. –

1

Нет, в JavaScript присваивание значения одной переменной в другую присваивает копию значения. Таким образом, после

c = a; 

переменная «c» имеет копию значения, которое находится в «a». Последующее присвоение копии значения переменной «b» на «a» не влияет на значение «c».

1

Оператор присваивания копирует значение правой части на переменную с левой стороны. Он не создает ссылку на переменную.

Когда оператор c = a работает, значение a еще 1, поэтому значение c становится 1.

Вы не изменяете значение c в другом месте кода, поэтому, когда вы достигаете b = c, значение по-прежнему 1.

 Смежные вопросы

  • Нет связанных вопросов^_^