jQuery:以下代码块中比较的含义是什么 - callback && function(){callback.call();}

Anm*_*raf 4 javascript jquery

jQuery.scrollTo.js库中查看此块(在第184行的v1.4中).

function animate( callback ){
    $elem.animate( attr, duration, settings.easing, callback && function(){
        callback.call(this, target, settings);
    });
};
Run Code Online (Sandbox Code Playgroud)

很想知道比较是如何工作的

callback && function() {callback.call(...)}; 
Run Code Online (Sandbox Code Playgroud)

这究竟是什么背后的含义.提前致谢.

Tom*_*lak 6

callback && function() {callback.call(...)};是做两件事:

  • 测试是否callback已定义和
  • 如果有,请在正确的上下文中调用它

JavaScript具有称为"短路逻辑表达式"的功能.如果逻辑表达式的一部分无法更改整体结果,则不会对其进行求值.

如果callbackundefined,那么它在逻辑表达式的上下文中计算为false(它是"falsy").所以表达式相当于false && ...,在这种情况下它实际上不再重要...,结果总是错误†1....在这种情况下,JavaScript并没有考虑.

如果callback没有 undefined的(但功能),逻辑表达式的第一部分的计算结果为真(它的"truthy").此时JavaScript评估了....总体结果恰好是函数表达式.函数表达式产生一个匿名函数,然后传递给jQuery animate().

callback.call()执行callback 确定的含义thiscallback.因此callback.call(this),请确保this引用与外部函数中相同的对象.


†1 绝对正确:表达式的总体结果不会是false,它将是undefined.