Conversation
| var a = 1; | ||
| } | ||
| alert(a); | ||
| // т.к. стоит знак отрицания значит а неопределена значит вывод undefined |
There was a problem hiding this comment.
var может быть ограничен только областью видимости функций. следовательно var внутри if будет объявлен глобально.
изначально движок js пробегается по всему скрипту и объявляет функции и переменные. поскольку a у нас в глобальной области видимости, то при первом проходе a будет объявлена с undefind внутри. после, движок js будет уже выполнять весь скрипт. в проверке "a" in window будет выдавать true, а !("a" in window) false, значит мы не зайдем уже внутрь if и не присвоим переменной a значение 1 и a останется undefind
| } | ||
| var a; | ||
| alert(a); | ||
| // т.к. var a всплывает при запуске скрипта то она перезаписывается функцией и alert покажет функцию |
There was a problem hiding this comment.
var допускает повторное объявление, но поскольку мы ничего не положили в var a, то значение останется прежним. если бы мы положили var a = 1, то тогда вывелась бы 1
| function a() { | ||
| alert(this); | ||
| } | ||
| a.call(null); |
There was a problem hiding this comment.
в строгом режиме выбросилась бы ошибка, но без него при передаче null, this будет ссылаться на глобальный объект Window
No description provided.