Мне показалось, что я понял, как работает метод setTimeout, но это меня сбивает с толку.Не понимаю этого setTimeout в JS
test.html (Я пытаюсь загрузить файл test.js перед файлом jQuery для демонстрации. Скажем, файл jQuery размещен локально).
<body>
// ...code
<div id="area"></div>
// ...code
<script src="test.js"></script>
<script src="jquery.js"></script>
</body>
test.js
$('#area').text('hello');
Я понимаю, в данном случае «привет» не получить напечатанный на браузере, потому что Jquery загружается после файла test.js. Переключение порядка этих файлов решает проблему. Но если оставить в покое заказ, и изменить файл test.js, SetTimeout делает его работу:
function wait() {
if(window.jQuery) {
$('#area').text("hello");
}
else
{
setTimeout(wait, 10);
}
}
wait();
В этом случае «привет» текст печатается в браузере. Но я как бы почесываю голову, потому что каким-то образом загружается файл jQuery. Но как? Почему файл test.js не попадает в бесконечный цикл навсегда, проверяя, загружен ли jQuery? Я был бы признателен за то, что я знаю о механизме происходящего.
Почему вы думаете, что _would_ пойманы в бесконечном цикле? –
Из-за очереди событий –
Это работает, потому что, когда загружается jQuery, переменная (jQuery) сохраняется в пространстве имен окна. Таким образом, ваш тайм-аут проверяет каждые 10 мс, если jQuery уже сохранен. – ItsGreg