Каков результат: var myvar1 = myvar2 = myvar3? - PullRequest
0 голосов
/ 22 сентября 2011

Я видел в некоторых скриптах nodejs переменные / объекты, которые используются следующим образом:

var myvar1 = myvar2 = myvar3;

Почему это используется и что это значит?

Ответы [ 6 ]

4 голосов
/ 22 сентября 2011

Будет оцениваться:

var myvar1 = myvar2 = myvar3;
var myvar1 = myvar3;          // 'myvar2' has been set to 'myvar3' by now
myvar3;                       // 'myvar1' has been set to 'myvar3' by now

Сначала будет присвоено myvar3 для myvar2 (без var, поэтому возможно неявное глобальное, следите за этим).

Тогда ему будет присвоено значение myvar3 для myvar1, потому что возвращается заданное значение.

Результат снова возвращается, что больше ничего не сделает - в последней строке ничего не происходит со значением myvar3.

Итак, в конце они имеют одинаковое значение.

3 голосов
/ 22 сентября 2011

myvar1 и myvar2 оба получают имя myvar3. первое выражение для оценки это myvar2 = myvar3. Это назначает myvar3 к myvar2. Результатом этой операции является присвоенное значение, а затем оно присваивается myvar1.

3 голосов
/ 22 сентября 2011

Если:

var myvar3 = 5;

var myvar1 = myvar2 = myvar3;

Тогда все они = 5

3 голосов
/ 22 сентября 2011

Устанавливает myvar2 на myvar3 и myvar1 на myvar2.

Я предполагаю, что myvar3 и myvar2 были объявлены перед этой строкой. Если нет, то myvar2 будет глобальным (так как var нет), а если myvar3 не определен, это выдаст ошибку.

Это расширяется до:

myvar2 = myvar3; // Notice there's no "var" here
var myvar1 = myvar2;
1 голос
/ 22 сентября 2011

, как уже объяснено, оператор приводит к тому, что все переменные имеют значение myvar3.

Я хотел бы добавить: используя подобные утверждения, вы должны остерегаться области действия, демонстрируемой:

function foo(){
  var c = 1;
  var a = b = c;
  console.log(a,b,c); //=> 1 1 1
  c = 2;
  console.log(a,b,c); //=> 1 1 2
}
console.log(b); //=> 1! [b] is now a variable in the global scope 

И присвоения не примитивных значений (так, ссылки на объекты)

function foo(){
  var c = {};
  var a = b = c;
  c.bar = 2;
  console.log(a.bar,b.bar,c.bar); 
       //=> 1 1 1 (a, b and c point to the same object)
}
1 голос
/ 22 сентября 2011

Это присвоит переменным myvar1 и myvar2 значение myvar3.Почему они это делают, мне неизвестно, но я думаю, они хотят, чтобы эти две переменные имели одинаковое значение myvar3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...