Подтвердить что ты не робот

Изменяет ли окно window.location выполнение javascript?

При написании кода на стороне сервера вам необходимо явно прекратить выполнение после отправки заголовку "Location:..." клиенту, или ваш код будет продолжать выполняться в фоновом режиме.

Но как насчет изменения window.location на стороне клиента script? Означает ли это немедленное прекращение выполнения текущего script или оно зависит от программиста, чтобы убедиться, что любой код, расположенный после этого вызова, не достиг?

4b9b3361

Ответ 1

Настройка window.location не подразумевает остановки выполнения JS. В качестве примера возьмем следующее:

function locationTest() {
  window.location = 'http://www.google.com/';
  window.open('http://www.yahoo.com/');
}

locationTest();

Попробуйте запустить Firebug/Web Inspector/etc. и вы заметите, что текущее окно загрузит Google, но также откроется новое окно с Yahoo.

Ответ 2

Это немедленно прекратит выполнение текущего script

Нет, оставшийся обработчик script будет выполняться до конца, пока элемент управления не вернется в браузер и события не начнутся. Когда загрузка новой страницы будет достаточно далеко, чтобы произошла навигация, будут срабатывать события beforeunload и unload, тогда страница и любой script в ней станут неактивными.

Однако любые дополнительные события и таймауты в очереди могут не срабатывать. Например, если вы перемещаете страницу в обработчике click кнопки отправки формы и не отменяете действие по умолчанию, возможно, что (состояние гонки) для навигации произойдет до события submit, поставленного в очередь действием по умолчанию click.