2013-12-25 4 views
1

Очень быстрый вопрос, поскольку у меня возникают какие-то странные ошибки, и я не могу найти документацию по этому вопросу. Есть ли порядок, в котором функции определены в файле?Определения функций JS порядка

Например:

function a() { 
    b(); //defined below the current function 
} 

function b() { 
    //do something 
} 

ли это считать правильным или у меня на ум заказ?

+0

нет! это не вопрос. –

ответ

5

Из-за переменного подъема «инструкции var и объявления функций будут перемещены в верхнюю часть их охватывающей области» [1].

Это может привести к сбоям по времени, но до тех пор, пока файл, содержащий функцию, загружен, порядок не имеет значения.

[1] http://bonsaiden.github.io/JavaScript-Garden/#function.scopes, http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html

+0

О человек ... Такие мельчайшие нюансы. Благодарим вас за ссылку на эту статью. Это проблема, которую я испытывал. Подождите, почему вы удалили ссылку на http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html, это хорошее чтение. – NewProger

+0

@NewProger Случайное удаление; Я положил его обратно. Спасибо, что согласились! –

3

В JavaScript не имеет значения, в каком порядке создаются функции, пока существует вызываемая функция.

2

Проблема вы работаете в переменна подъемная. Узнайте больше об этом here

Это считается неприемлемым для этого в соответствии с JSLint Крокфорда. Однако это не имеет значения, если вы определяете функции таким образом. Например, ваш код будет работать, но что-то вроде

function a(){ 
    b(); 
} 
function b(){ 
    //do something 
} 

будет работать, но

function a(){ 
    b(); 
} 
var b=function(){//do something}; 

не будет работать.

Так что, если все загружено, прежде чем вы его назовете, все будет в порядке. Рассмотрите его обертывание в $("window").load()

+0

Это полностью зависит от того, когда вызывается 'a'. –

1

Нет, это не имеет значения, где функция. Он может находиться в верхней части файла, в нижней части файла, даже в другом файле. какой материей является существование.

После загрузки JavaScript он будет рассматриваться как отдельный файл или сценарий; это причина, по которой у вас может не быть функции с одной и той же подписью даже в двух разных файлах сценариев, которые используются на одной странице.

Fiddle with both cases

a(); 
c(); 

function a() { 
    b(); //defined below the current function 
} 

function b() { 
    alert("called b"); 
} 

function c() { 
    b();//defined above the current function 
} 
Смежные вопросы