Ваш вопрос:
Почему иногда определение переменной после вызова переменной не дать неопределенным?
Тогда вы обеспечиваете это как пример:
alert(i); // alert undefined
var i = 1;
Он предупреждает undefined
, потому что вы выпускаете alert()
перед тем i
определены.
И в первом примере:
function sayAlice() {
var sayAlert = function() { alert(alice); }
var alice = 'Hello Alice';
return sayAlert;
}
sayAlice()() //alert Hello Alice
Такое же поведение можно ожидать, но это, кажется, как ваш нечетным способ вызова sayAlice
происходит дважды с этим ()()
. Что в основном означает, что это может произойти быстро, но первый вызов sayAlice()
установит переменную alice
, но, скорее всего, произойдет с alert
на второй итерации через sayAlice()()
.
Ждать. Глядя на это снова, это то, что происходит в первом примере. Это просто определяет sayAlert
как функцию, но на самом деле не запустить его:
var sayAlert = function() { alert(alice); }
Но тогда вы сделаете это:
var alice = 'Hello Alice';
Который присваивает значение alice
. И тогда вы, наконец, выполните следующее:
return sayAlert;
Это происходит после первых двух предметов. Значит, на этой третьей линии у вас есть определенная функция, а затем определенная переменная, но она объединяется только в конечной строке.
Это имеет смысл для меня. Но sayAlice()()
с двойным ()
кажется странным.
Переключить строки во втором примере, и он работает – Sebastian
Да ... Я знаю. Я хочу знать, почему в первом фрагменте это сработало – Blake
См. Ссылки, которые я представил в своем ответе, и вы узнаете. –