почему вызов window.init из глобальной функции init не вызывает бесконечной рекурсии?

StackOverflow https://stackoverflow.com//questions/21013357

Вопрос

Итак, почему этот код не зацикливается бесконечно?

window.init = function(){
    console.log("window.init")
}

function init(){
    console.log("init")
    window.init();
}

init();

jsfiddle: http://jsfiddle.net/FAt6C/

Это было полезно?

Решение

Ваш код настроен на запуск при загрузке (см. поля вверху слева), что в основном указывает jsFiddle обернуть этот код в функцию, которая затем устанавливается в качестве обработчика onload. function init() фактически объявляется в области действия этого обработчика событий, а не в окне.

Однако, даже если вы не переносите код, объявления функций в основном выполняются как часть настройки текущей области, перед другими элементами в этой области (ECMA-262, §10.5).Так init уже существует до того, как вы скажете window.init =..., и этот оператор присваивания перезаписывает сломанный init.Это означает, что если вы установите для переноса значение "без переноса" (независимо от местоположения), вы должны видеть только "window.init" в консоли.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top