Это работает, только если var y
, как было ранее , определено , в противном случае y
будет global .
В таком случае вам лучше сделать:
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», автор Стоян Стефанов (О'Рейли).Copyright 2010 Yahoo !, Inc., 9780596806750. ”