Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 代码的执行顺序_Javascript_Ajax - Fatal编程技术网

Javascript 代码的执行顺序

Javascript 代码的执行顺序,javascript,ajax,Javascript,Ajax,哪个先发生-y的初始化还是x的初始化? 如果ajax调用是sync而不是async,那么这两行的顺序是什么 方法1在加载页面时被调用。如果它是同步的,并且如果获取成功,则首先初始化Y。如果它是异步的,也可以是异步的,但我会把钱放在X上,因为我怀疑它会在web方法返回之前继续。也就是说,不能保证X将首先被触发。X将首先被初始化(除非HTTP响应在能够执行下一行之前返回,这是极不可能的)。$。ajax是异步的,需要时间才能返回响应 如果您想保证y首先被初始化,您可以这样做: function met

哪个先发生-y的初始化还是x的初始化? 如果ajax调用是
sync
而不是
async
,那么这两行的顺序是什么


方法1在加载页面时被调用。

如果它是同步的,并且如果获取成功,则首先初始化Y。如果它是异步的,也可以是异步的,但我会把钱放在X上,因为我怀疑它会在web方法返回之前继续。也就是说,不能保证X将首先被触发。

X将首先被初始化(除非HTTP响应在能够执行下一行之前返回,这是极不可能的)。$。ajax是异步的,需要时间才能返回响应

如果您想保证y首先被初始化,您可以这样做:

function method1() {
    method2();
    var x = 1;
}

function method2() {
    $.ajax({
        type: "GET",
        async: true,
        url: "/MyController/MyMethod",
        success: function (data) {
            var y = 6;
        }
    });
}

这取决于调用哪个方法,因为变量只存在于函数中。如果调用是同步的,则取决于GET请求成功与否。@Thilo让我们假设它总是成功进入。“如果是异步的,则可能是,”不。因为Javascript是单线程的,当前代码路径将在执行任何回调之前完成。X总是首先被触发。@Thilo您能再解释一下吗?在Javascript中,一次只能运行一个代码路径。如果调用一个函数(如
method1
),它将在其他任何事情发生之前运行到完成。你可以通过在里面放无限个循环来证明这一点。只有在“无其他事可做”的情况下,才会执行回调(或onclick处理程序之类的其他操作)。他们也会一个接一个地执行。只有一个执行线程(这样做的好处是编程模型更容易)。推荐阅读:node.js及其动机简介。“除非HTTP响应在能够执行下一行之前返回,这是极不可能的”我认为这永远不会发生,不管响应有多快。Javascript是单线程的,事件/回调将在当前代码路径完成后处理(行间不会中断)。
function method1() {
    method2(function()
    {
        var x = 1;
    });
}

function method2(callback) {
    $.ajax({
        type: "GET",
        async: true,
        url: "/MyController/MyMethod",
        success: function (data) {
            var y = 6;
            callback();
        }
    });
}