Методы создаются при выполнении кода.
Если семантика кода верна, интерпретатор может выполнить код.
При разборе ничего не было выполнено.
Файл после синтаксического анализа выполняется один за другим, перед следующим анализом.
Проверьте это:
У нас есть два файла js.
<script src ='1.js'></script>
<script src ='2.js'></script>
Во втором файле мы помещаем объявление setTimeout;
//file2
window.setTimeout = function(){};
В первом файле мы будем проверять переопределение setTimeout
//file1
var f = function() { alert( setTimeout ); };
f();// alerts native setTimeout
setTimeout( f, 1000 ); // We use native settimeout, propably after one second file2 being loaded and executed and function `f` will be alerts the overriden setTimeout
Если бы методы, которые я добавил, были бы созданы во время синтаксического анализа. Это будет иметь доступ к нему в любом месте скрипта, в котором он был создан, даже до его объявления.
так:
//somefile.js
setTimeout(); // we do not have access to function declared below, so while parsing this wasn't created.
window.setTimeout = function() { alert( 'whatever' ); }