2012-04-11 4 views
4

Я новичок в javascript и задаюсь быстрым вопросом. Скажем, у меня есть следующий код:Порядок выполнения функции Javascript

function entryPoint() 
{ 
    callFunction(parameter); 
} 

function callFunction(parameter) 
{ 
    ... //do something here 
    var anotherFunction = function() { isRun(true); }; 
} 

Мой вопрос заключается в том, что, когда callFunction(parameter) называется, а переменная anotherFunction объявляется, делает isRun(true) фактически выполнить в течение этого экземпляра? Я думаю, что это не так, и содержимое другой функции только «хранится» в переменной, которая будет фактически выполняться по строкам, когда где-то вниз по линии, выполняется вызов anotherFunction(). Кто-нибудь может прояснить эту путаницу?

+2

Вы правы, это не будет выполнено в этом примере. –

ответ

5

Кажется, путаница эта строка кода

var anotherFunction = function() { isRun(true); }; 

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

anotherFunction(); // Now it runs 
+0

Вот стиль для «немедленного выполнения анонимной функции». 'var anotherFunction = (function() {isRun (true);})();' – buley

4

Вы почти описали его совершенно.

anotherFunction просто получает ссылку на недавно созданный Function Object (да, функции также являются объектами на этом языке), но он не выполняется.

Вы можете выполнить его по телефону

anotherFunction(); 

, например.

1

Вы можете написать простой тест, как так:

entryPoint(); 

function entryPoint() 
{ 
    alert("In entryPoint"); 
    callFunction(); 
} 

function callFunction() 
{ 
    alert("In callFunction"); 
    var anotherFunction = function() { isRun(); }; 
} 

function isRun() 
{ 
    alert("In isRun"); 
} 

И, ответ нет, isRun() не дозвонились.

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