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