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

标签 javascript jquery

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 有一个特性叫做“短路逻辑表达式”。如果逻辑表达式的一部分不能改变整体结果,则不会对其求值。

如果 callbackundefined,那么它在逻辑表达式的上下文中计算为 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/

相关文章:

javascript - 如何清除angularjs中下拉列表的值

javascript - JavaScript 中的删除运算符如何工作?

javascript - 有了 HTML5、JavaScript 和 AJAX,还需要 PHP、ASP.NET 和 J2EE 后端吗?

javascript - jQuery:折叠在页面加载时不起作用

javascript - 如何通过组变量更改 JSON 结构?

javascript - 使用 `find( )` 并选择父元素

javascript - 如何在不丢失 javascript 结构的情况下过滤嵌套树对象?

c# - 如何在 C#.net Web-Pages with WebMatrix 环境中使用 AJAX 传递和访问服务器端的对象数组?

jquery - 获取多个同名字段的 JSON 格式的表单数据

javascript - 避免在页面加载或就绪时执行 javascript 的最佳方法?