2013-07-04 2 views
2

Я не являюсь специалистом JavaScript, но я нашел код, как этотФункция excuted до создания

a(); 

function a(){ 
    alert('a'); 
} 

, и я с удивлением обнаружил, что работает (я думаю, что что-то подобное, что не будет работать в Python). Я ожидал, что функция a не может быть выполнена до создания. Как работает интерпретатор и почему функции можно вызвать перед объявлением?

+0

Я не эксперт JS либо, но AFAIK браузер анализирует весь документ 1-й b4 его выполнения. как чтение его 1-го, а затем eval(): D и не получаю флагов на меня: D –

+0

читать [JavaScript «hoisting»] (http://stackoverflow.com/questions/15311158/javascript-hoisting) –

ответ

6

Это происходит из-за переменного подъема. Смотрите этот ответ для получения дополнительной информации

JavaScript 'hoisting'

Некоторые документы по этому поводу: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var#var_hoisting

Если вы напечатаете это так, он не будет работать:

a(); 
a = function(){ 
    alert('a'); 
} 
1

код который находится внутри функций и объектов, будет выполняться всякий раз, когда вызывается функция или объект . Если он вызывается из кода непосредственно в голову или тело страницы, то его место в заказе исполнения фактически является местом, где функция или объект вызывается из прямого кода.

См. reference here.

И в нашем случае функция даст ошибку, как вы можете видеть example here.

0

Это связано с тем, что функция a() объявляется через синтаксис функции декларации, а объявление функции выполняется сразу после разбора скрипта. С другой синтаксис, функции выражения, например:

var b = function(){ 
    alert('b'); 
} 

он не будет работать (see example).

Подробнее: http://javascriptweblog.wordpress.com/2010/07/06/function-declarations-vs-function-expressions/

Смежные вопросы