0

我真的在互联网上搜索了很长时间来寻找这个问题。我只想在之前调用的函数结束时运行代码。让我解释一下这个例子:

var id=0;

function refreshID(){
    //refresh the div
}

function postID(){
    //some code
    refreshID();
    id=1;    
}

通过调用函数 postID,函数 refreshID 将被执行,然后变量 id 被设置为 1。但我认为在函数 refreshID() 完全执行之前变量被设置为 1。所以我的问题是:如何运行代码(在这种情况下更改变量的值),当另一个函数结束时,当它完全执行时。

问候

4

4 回答 4

0

不,在对 refreshID 的调用完成之前,id 不会被分配 1。它由 javascript 引擎本身确保。正如在其他答案中所说,它是单线程的,并且只有一行执行。但是不需要任何其他网络/超时/间隔/...的ajax来解释为什么你会认为你的代码执行有问题。如果函数 refreshID 正在对 html 进行任何类型的更改,请记住这些更改将在脚本执行结束之前不可见。

于 2013-11-01T10:16:48.330 回答
0

JavaScript 不提供对变量的并发访问,refreshID 将在您将 id 设置为 1 之前完全执行。

于 2013-11-01T10:03:37.253 回答
0

您可以使用回调:

function refreshID(doWhateverElse){
    //refresh the div
    doWhateverElse();
}

function postID(){
    //some code
    refreshID(function() { 
        id=1;
    } );
}

作为参数传入的函数refreshID将仅在 div 刷新后运行。

于 2013-11-01T10:03:41.947 回答
0

JavaScript 是单线程的,因此可以保证代码是线性运行的——它永远不会跳过代码行。

在您的示例中,id = 1总是refreshID返回后执行。让事情变得更棘手的是,它refreshID可能会将事情设置为异步完成,例如 using setTimeout,在这种情况下refreshID将在回调运行之前返回。在这种情况下,将回调传递给函数或使用 Promise 可能会很有用。

例如:

var id = 0;

function refreshID(cb) {
    setTimeout(function () {
        // your work
        // ...

        cb();
    });
}

function postID(){
    // some code
    refreshID(function () { id = 1; });
}
于 2013-11-01T10:06:03.347 回答