2012-04-11 241 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()不会被调用。