Если foo
уже определен и имеет значение true, он устанавливает foo = foo
, то есть он ничего не делает.
Если foo
определен, но имеет значение false, он будет всплывать независимо от foo
is (false
, null
, undefined
, пустая строка, 0, NaN), но поскольку alert
ничего не возвращает, foo
будет установлено в undefined
.
Если foo
еще не определено, будет выдано исключение.( Редактировать: В вашем примере foo
всегда будет определяться из-за объявления var foo
.)