Javascript jQuery是否接受任何顺序的参数?

Javascript jQuery是否接受任何顺序的参数?,javascript,parameters,conditional-statements,jquery,Javascript,Parameters,Conditional Statements,Jquery,我注意到,在使用jQuery.fn.animate()时,我可以按任意顺序将部分或全部参数(用于动画的css、回调函数、松弛和持续时间)传递给函数 查看函数源代码,它是这样开始的: function (prop, speed, easing, callback) { var empty = jQuery.isEmptyObject(prop), optall = jQuery.speed(speed, easing, callback), . . . 然后它开始实际处理

我注意到,在使用jQuery.fn.animate()时,我可以按任意顺序将部分或全部参数(用于动画的css、回调函数、松弛和持续时间)传递给函数

查看函数源代码,它是这样开始的:

function (prop, speed, easing, callback) {
    var empty = jQuery.isEmptyObject(prop),
        optall = jQuery.speed(speed, easing, callback),
.
.
.
然后它开始实际处理传递的信息。因此,显然css属性对象必须是链中的第一个-否则它将破坏函数(或者是?)。但是再看看jQuery.speed:

function (speed, easing, fn) {
    var opt = speed && typeof speed === "object" ? jQuery.extend({},
    speed) : {
        complete: fn || !fn && easing || jQuery.isFunction(speed) && speed,
        duration: speed,
        easing: fn && easing || easing && !jQuery.isFunction(easing) && easing
    };
.
.
.

显然,这就是魔术的所在。但是jQuery减少括号和大括号的方法使我很难分解所有这些条件。您能简化jQuery.speed函数吗?谢谢。

以更全面的方式编写,jQuery就是这样做的:

function (speed, easing, fn) {
    var opt;
    if (speed && typeof speed === "object") {
        opt = jQuery.extend({}, speed);
    }
    else {
        var complete_p,
            duration_p = speed,
            easing_p;

        // Find out what's the "complete" property
        if (fn) complete_p = fn;
        else {
            if (easing) {
                complete_p = easing;
            }
            else {
                if (jQuery.isFunction(speed)) {
                    complete_p = speed;
                }
            }
        }

        // Find out what's the "easing" property
        if (fn) {
            easing_p = easing;
        }
        else {
            if (easing) {
                if (!jQuery.isFunction(easing)) {
                    easing_p = easing;
                }
            }
        }

        opt = {
            complete: complete_p,
            duration: duration_p,
            easing: easing_p
        };
    }
.
.
.

所以。。。是的,它正在做一些检查以允许您更改订单。不过,我不相信它。

不,jquery只测试参数的类型,以检测是否遗漏了其中一些参数。但是jQuery函数不允许您更改参数的顺序?我的错是,我认为它可以。你能回答这个问题吗?用更可读的方式重写所有这些代码?我当然可以。也许你也是。但那太无聊了…你是认真的吗?我不理解这段代码背后的逻辑:(使用谷歌搜索javascript操作符和falsy比较。我认为这是你对这段代码感到困惑的根源。一旦你掌握了这些内容,这段代码就相当简单了。太棒了。我读到了:还将原始代码与你的答案进行了比较,我不得不说,这段代码中存在一些严重的压缩现象!谢谢。