Присвоение имени переменной тому же имени переменной При выполнении 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 еще не определен
Ответ 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 еще не определен