函数结束时如何运行代码

How to run code when function is over?

本文关键字:运行 代码 何运行 结束 函数      更新时间:2023-09-26

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

var id=0;
function refreshID(){
    //refresh the div
}
function postID(){
    //some code
    refreshID();
    id=1;    
}

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

问候

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

您可以使用回调:

function refreshID(doWhateverElse){
    //refresh the div
    doWhateverElse();
}
function postID(){
    //some code
    refreshID(function() { 
        id=1;
    } );
}

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

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

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

例如:

var id = 0;
function refreshID(cb) {
    setTimeout(function () {
        // your work
        // ...
        cb();
    });
}
function postID(){
    // some code
    refreshID(function () { id = 1; });
}

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