Javascript 异步调用和更新变量

Javascript 异步调用和更新变量,javascript,asynchronous,callback,Javascript,Asynchronous,Callback,考虑以下javascript代码片段- var x; asyncFunction(); syncFunction(); function syncFunction() { console.log(x); } function asyncFunction() { // any async call or an ajax c

考虑以下javascript代码片段-

        var x;
        asyncFunction();
        syncFunction();            

        function syncFunction() {
            console.log(x);
        }


        function asyncFunction() {  
            // any async call or an ajax call
            //setTimeout(function () {
            //    x = 5;                        
            //}, 1000);                
        }

x变量的值未定义,因为异步函数需要一些时间来执行。假设我没有使用承诺/延迟、发布和订阅的自由,我也不应该更改上面代码段中异步和同步调用的执行顺序,那么我如何才能正确记录x的正确值?这是最近向我提出的一个采访问题。

任何要在异步函数之后运行的操作都应该在异步函数完成时从异步函数调用—回调

var x;
asyncFunction(syncFunction); // Pass the function as a callback      

function syncFunction() {
    console.log(x);
}


function asyncFunction(callback) {  
    // using your example
    setTimeout(function () {
        x = 5;
        callback();              
    }, 1000);                
}

更改“asyncFunction”,使其接受参数,并使超时处理程序中的代码将该参数视为函数并调用它。。将“syncFunction”作为该参数传递。这是否在中得到了回答?这是一个标记为promise、pub-sub和deferred的函数,而这些是您不应该使用的?仅供参考,您可以执行
回调()
。您不需要
callback.call()
。您还应该将
x
设置为参数,而不是全局变量。