Javascript 函数结束时如何运行代码?

Javascript 函数结束时如何运行代码?,javascript,Javascript,我在网上搜索了很久才找到这个问题。我只想在之前调用的函数结束时运行代码。让我解释一下这个例子: var id=0; function refreshID(){ //refresh the div } function postID(){ //some code refreshID(); id=1; } 通过调用函数postID,将执行函数refreshID,然后将变量id设置为1。但是我认为在函数refreshID()完全执行之前,变量被设置为1。所

我在网上搜索了很久才找到这个问题。我只想在之前调用的函数结束时运行代码。让我解释一下这个例子:

var id=0;

function refreshID(){
    //refresh the div
}

function postID(){
    //some code
    refreshID();
    id=1;    
}
通过调用函数postID,将执行函数refreshID,然后将变量id设置为1。但是我认为在函数refreshID()完全执行之前,变量被设置为1。所以我的问题是:当另一个函数结束时,当它完全执行时,如何运行代码(在本例中更改变量的值)


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

您可以使用回调:

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

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

作为参数传递给refreshID的函数只有在刷新div后才会运行。

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

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

例如:

var id = 0;

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

        cb();
    });
}

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

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

我认为在函数refreshID()完全执行之前,变量被设置为1
有证据吗?使用
setTimeout
函数..非常感谢。这很有效