Я всегда думал, что браузеры выполняют код JavaScript сверху вниз по строке (вы, похоже, ожидаете этого поведения со языка сценариев). Но ясно, что это не тот случай:Как точно интерпретируется JavaScript?
// отлично работает
<script>
test();
function test() { alert('test'); }
</script>
но если я объявляю функции в качестве переменной он терпит неудачу с «неперехваченным ReferenceError: тест не определен»:
<script>
test();
var test = function() { alert('test'); }
</script>
Поэтому механизм javascript иногда не выполняет код сверху вниз. Он может как-то предварительно загружать функции, даже если они объявлены в конце. Как это работает и почему?
Я верю, что функция() {} - это особый случай, который перемещается в верхнюю часть области. Я мог ошибаться. –
Он разбирается полностью, прежде чем он будет выполнен во что-то *, как * a [AST] (http://en.wikipedia.org/wiki/Abstract_syntax_tree). Вот почему вы видите «Синтаксические ошибки» для строк, расположенных дальше по источнику. – Matt
Посмотрите на главный ответ здесь: http://stackoverflow.com/questions/336859/javascript-var-functionname-function-vs-function-functionname – viper