Присвоение имени переменной тому же имени переменной
При выполнении
var a=b=c=d=e=f=a;
//no error(a has not initialize before)
var x=y;
//ReferenceError: y is not defined
Как первый код может выполняться, как если бы a
уже был инициализирован раньше.
Ответы
Ответ 1
Это из-за переменного подъема. var x = EXPR;
фактически преобразуется в это:
// beginning of the block (function/file)
var x; // === undefined
// ...
// the actual position of the statement
x = EXPR
В вашем примере это означает:
var a; // === undefined
a = b = c = d = e = f = a;
Обратите внимание, что только a
объявляется с помощью var
- поэтому вы создаете тонны глобальных переменных, которые всегда плохие вещи!
Ответ 2
Ваше первое утверждение похоже на
var a = undefined;
a = window.b = window.c = window.d = window.e = window.f = a;
где a определено, а другие являются глобальными. предположим, что вы выполняете функцию.
(function(){
var a=b=c=d=e=f=a;
b = 10;
}());
b
можно получить доступ снаружи.
во второй var x=y
, y
еще не определен