Ссылка на значение JavaScript, прежде чем это будет объявлено - может кто-то объяснять это

Вы могли изменить заголовок веб-страницы с каждым новым сообщением для предупреждения пользователя. Я сделал это для клиента чата браузера, и большинство пользователей думало, что это работало достаточно хорошо.

document.title = "[user] hello world";
14
задан Volker E. 26 August 2014 в 19:48
поделиться

3 ответа

Объявления функций подлежат подъему, и они оцениваются во время синтаксического анализа, подъем означает, что они доступны для всей области, в которой они были объявлены, например:

foo(); // alerts foo
foo = function () { alert('bar')};
function foo () { alert('foo');}
foo(); // alerts bar

Первый вызов foo выполнит объявление функции , потому что во время синтаксического анализа он стал доступным, второй вызов foo выполнит выражение функции , объявленное во время времени выполнения .

Для более подробного обсуждения различий между выражениями функций и объявлениями функций, проверьте этот вопрос и в этой статье .

38
ответ дан 1 December 2019 в 07:19
поделиться

функция testprint является глобальной для страницы. testprint = function ... присваивает переменную, в которой я точно не знаю всю область видимости, но я понимаю, что она не добавлена ​​в словарь таблицы функций, как первая.

-1
ответ дан 1 December 2019 в 07:19
поделиться

Причина № 3 не меняет окно. onload заключается в том, что функции вызываются по ссылке, а не по имени. Когда вы устанавливаете window.onload = testprint , он назначает ссылку на текущее значение testprint (дверь № 2, как объяснено CMS) для window.onload . Изменение значения testprint позже не влияет на значение window.onload .

Дверь №4 не отменяет дверь №2 (если, как вы сказали, вы переместите его в первый блок сценария), потому что он находится в другом блоке сценария, поэтому он будет проанализирован после завершения первого блока.

0
ответ дан 1 December 2019 в 07:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: