2012-04-11 123 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

你說得對,它不會在這個例子中執行。 – 2012-04-11 17:59:23

回答

5

看來混亂是這行代碼

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

聲明一個函數/λ類型的變量。 lambda聲明它沒有運行。在它通過變量調用它之前,代碼將不會執行

anotherFunction(); // Now it runs 
+0

這是「立即執行匿名函數」的樣式。 'var anotherFunction =(function(){isRun(true);})();' – buley 2012-04-11 18:02:35

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()不會被調用。