Ответ 1
Он работает только в том случае, если var y
как ранее определен, иначе y
будет глобальным.
В таком случае вам лучше:
var x, y;
x = y = 'value';
Цепочки цепочек
Другой антипаттерн, который создает подразумеваемые глобальные переменные, состоит в цепочке присвоений как части
var. В следующем фрагменте a
является локальным, но b
становится глобальным, что
вероятно, не то, что вы хотели сделать:
// antipattern, do not use
function foo() {
var a = b = 0;
// ...
}
Если вы задаетесь вопросом, почему это происходит, из-за оценки справа налево. Первый,
выражение b = 0
оценивается и в этом случае b не объявляется. Возвращаемое значение
это выражение 0
, и оно назначено новой локальной переменной, объявленной с помощью var a
. В
другими словами, как будто вы напечатали:
var a = (b = 0);
Если вы уже объявили переменные, назначение цепочки прекрасное и не создает неожиданные глобальные переменные. Пример:
function foo() {
var a, b;
// ...
a = b = 0; // both local
}
"Шаблоны JavaScript, Стоян Стефанов (OReilly). Copyright 2010 Yahoo!, Inc., 9780596806750. "