从 jQuery.scrollTo.js
库中看到这个 block (在 v1.4 的第 184 行)。
function animate( callback ){
$elem.animate( attr, duration, settings.easing, callback && function(){
callback.call(this, target, settings);
});
};
很想知道比较将如何进行
callback && function() {callback.call(...)};
这背后的确切含义是什么。提前致谢。
最佳答案
callback && function() {callback.call(...)};
做了两件事:
- 测试是否定义了一个
回调
- 如果有,在正确的上下文中调用它
JavaScript 有一个特性叫做“短路逻辑表达式”。如果逻辑表达式的一部分不能改变整体结果,则不会对其求值。
如果 callback
是 undefined
,那么它在逻辑表达式的上下文中计算为 false(它是 “falsy”)。所以表达式等同于 false && ...
,在这种情况下,...
实际是什么不再重要,结果将始终为 false †1。在这种情况下,JavaScript 不会查看 ...
。
如果 callback
不是 undefined
(而是一个函数),逻辑表达式的第一部分计算为真(它是 “真实”)。此时 JavaScript 计算 ...
。整体结果恰好是一个函数表达式。函数表达式产生一个匿名函数,然后传递给 jQuery 的 animate()
。
callback.call()
执行callback
并 确定callback 中
。所以 this
的含义callback.call(this)
确保 this
引用与外部函数中相同的对象。
†1 绝对正确:表达式的整体结果不会是false
,而是undefined
。
关于javascript - jQuery:以下代码块中比较的含义是什么 - callback && function() {callback.call();},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8324592/