Javascript jQuery是否接受任何顺序的参数?
我注意到,在使用jQuery.fn.animate()时,我可以按任意顺序将部分或全部参数(用于动画的css、回调函数、松弛和持续时间)传递给函数 查看函数源代码,它是这样开始的: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), . . . 然后它开始实际处理
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比较。我认为这是你对这段代码感到困惑的根源。一旦你掌握了这些内容,这段代码就相当简单了。太棒了。我读到了:还将原始代码与你的答案进行了比较,我不得不说,这段代码中存在一些严重的压缩现象!谢谢。