我只是用animate()方法玩了一下。
.animate(properties [,duration] [,easing] [,complete])
我知道我不必将所有参数传递给javascript中的函数。但我想知道的是jquery如何确定function(){ }
是指回调函数,它实际上是第4个参数,而不是缓动字符串(它是3:rd)?
$('div').animate({ height: '10px' }, 100, function(){ });
答案 0 :(得分:3)
只需要检查类型的测试:
来自the source code(animate
来电speed
):
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
};
...
isFunction: function( obj ) {
return jQuery.type(obj) === "function";
},
...
type: function( obj ) {
return obj == null ?
String( obj ) :
class2type[ core_toString.call(obj) ] || "object";
},
...
core_toString = Object.prototype.toString
...
jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
class2type[ "[object " + name + "]" ] = name.toLowerCase();
});
所以基本上检查Object.prototype.toString.call(fn)
是"[object Function]"
。
答案 1 :(得分:1)
JQuery查看参数的类型以查找输出, easing 参数的类型为 string ,而完整参数的类型为功能。
查看.animate()的api,找出每个参数的类型。
示例:
function test(first, second, third) {
if (typeof third == 'string') {
//third is the easing function
} else if (typeof third == 'function') {
//third is the callback function
}
}
答案 2 :(得分:1)
检查参数的 typeof 和 arguments.length 。
答案 3 :(得分:1)
可以检查参数的类型。
像:
if (typeof easing == 'function') {
complete= easing;
easing = 'some default value';
} else {
// ...
}
答案 4 :(得分:0)
我的猜测是使用typeof()来查看param是否是一个函数,但是如果你真的想知道,请查看它们的来源:https://github.com/jquery/jquery
答案 5 :(得分:0)
大概是:
function test(){};
typeof test // 'function'