Jquery 嵌套按顺序运行的函数

Jquery 嵌套按顺序运行的函数,jquery,function,callback,Jquery,Function,Callback,我知道这是基本的,但在查看了多个资源(如)后,我被卡住了。如何嵌套functionTwo,使其仅在functionOne完成后运行?以下是我的尝试。(实际上,我想在Functions2中做一些更复杂的事情,我只是简化了这个测试用例。) 这是可行的,但它们是独立运行的吗?当I时,不会记录任何内容(除非这是一个单独的错误) 然后我试了一下: $(function () { functionOne(); }); function functionOne() { $(".foo:fi

我知道这是基本的,但在查看了多个资源(如)后,我被卡住了。如何嵌套
functionTwo
,使其仅在
functionOne
完成后运行?以下是我的尝试。(实际上,我想在Functions2中做一些更复杂的事情,我只是简化了这个测试用例。)

这是可行的,但它们是独立运行的吗?当I时,不会记录任何内容(除非这是一个单独的错误)

然后我试了一下:

$(function () {
    functionOne();
});

function functionOne() {
    $(".foo:first").attr('id', 'bar', function () {
            functionTwo();
        });
    }

function functionTwo() {
    console.log($('.foo:first').attr('id'));
}

没有记录任何内容。如果
.attr

然后:

没有记录任何内容。我不认为
.when
.done
应该这样使用


那么我应该如何嵌套这些函数呢?

为什么不尝试返回第二次调用的函数呢

function functionOne() {
    $(".foo:first").attr('id','bar');
    return functionTwo();
}

第一条路就是去这里的路

$(function () {
    functionOne();
});

function functionOne() {
    $(".foo:first").attr('id','bar');
    functionTwo();
}

function functionTwo() {
    console.log($('.foo:first').attr('id'));     // log the new id: 'bar'
}
.attr
是同步的,因此它可以正常工作

setTimeout
示例()中,您使用的
setTimeout
不正确

setTimeout(function functionOne() {}, 2000)
这和你想象的不一样。这将创建一个函数,并在2秒后运行它。名称
functionOne
将仅存在于函数自身的范围内

你可能想要这个:

$(function () {
    functionOne();
});

function functionOne() {
    setTimeout(function(){
        $(".foo:first").attr('id','bar');
        functionTwo();
    }, 2000);
}

function functionTwo() {
    console.log($('.foo:first').attr('id'));     // log the new id: 'bar'
}

演示:

设置超时(函数functionOne(){
没有你认为的那样做。这似乎不是第一个方法不起作用的原因。而且不,
attr
不接受回调。你是对的,
不起作用时。第一个有什么问题吗?不能将非jquery方法链接到
$。当
作为参数传递时,我可以在chro中看到日志我。这与他的第一个示例有什么不同?这里的
返回的意义是什么?它如何修复/更改任何东西?它提供了将成功/失败消息传回调用方的能力。1目前的情况下,它不会给调用函数提供反馈。但这并不能真正回答这里的问题。
setTimeout(function functionOne() {}, 2000)
$(function () {
    functionOne();
});

function functionOne() {
    setTimeout(function(){
        $(".foo:first").attr('id','bar');
        functionTwo();
    }, 2000);
}

function functionTwo() {
    console.log($('.foo:first').attr('id'));     // log the new id: 'bar'
}