JavaScript函数执行顺序

4

我是一个新手,对javascript不太熟悉,有一个快速的问题。假设我有以下代码:

function entryPoint()
{
   callFunction(parameter);
}

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

我的问题是,当调用callFunction(parameter)并声明变量anotherFunction时,isRun(true)是否在此实例化期间实际执行?我认为它不会执行,另一个函数的内容只是被“存储”在变量中,直到稍后在某个地方下一行执行anotherFunction()调用时才实际执行。有人能澄清函数混淆吗?


2
你说得对,在那个例子中它不会被执行。 - James M
3个回答

5

看起来混淆的是这行代码

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

这声明了一个函数/lambda类型的变量。Lambda被声明但未运行。只有通过变量调用它时,其中的代码才会执行。
anotherFunction(); // Now it runs

这是一个“立即执行的匿名函数”的样式。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() 没有被调用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接