如何在功能结束时运行代码?

时间:2013-11-01 10:00:33

标签: javascript

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

var id=0;

function refreshID(){
    //refresh the div
}

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

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

问候

4 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您可以使用回调:

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

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

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

答案 2 :(得分:0)

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

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

例如:

var id = 0;

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

        cb();
    });
}

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

答案 3 :(得分:0)

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