Javascript jQuery:What';在下面的代码块中,比较的含义是什么&;函数(){callback.call();}
从Javascript jQuery:What';在下面的代码块中,比较的含义是什么&;函数(){callback.call();},javascript,jquery,Javascript,Jquery,从jQuery.scrollTo.jslibrary(第184行)中查看此块 我很想知道这种比较是如何进行的 callback && function() {callback.call(...)}; 这背后的确切含义是什么。提前谢谢。这不是比较.animate()是一种方法,因此括号中的所有项都是参数。回调函数(){callback.call(…)}正在做两件事: 测试是否定义了回调,以及 如果有,请在正确的上下文中调用它 JavaScript有一个称为“短路逻辑表达式”
jQuery.scrollTo.js
library(第184行)中查看此块
我很想知道这种比较是如何进行的
callback && function() {callback.call(...)};
这背后的确切含义是什么。提前谢谢。这不是比较
.animate()
是一种方法,因此括号中的所有项都是参数。回调函数(){callback.call(…)}代码>正在做两件事:
- 测试是否定义了
,以及回调
- 如果有,请在正确的上下文中调用它
回调
是未定义的
,那么它在逻辑表达式的上下文中计算为false(它是“falsy”)。因此,表达式将等效于false&&…
,在这种情况下,..
实际上是什么不再重要,结果将始终为false†1。在本例中,JavaScript没有查看…
如果回调
不是未定义
(而是一个函数),则逻辑表达式的第一部分计算结果为true(它是“truthy”)。此时,JavaScript计算…
。总体结果恰好是一个函数表达式。函数表达式生成一个匿名函数,然后将其传递给jQuery的animate()
callback.call()。因此,callback.call(this)
确保this
引用的对象与外部函数中的对象相同
†1绝对正确:表达式的整体结果不会是假
,而是未定义
这将检查回调是否为truthy(不为false,0,“,null,未定义,NaN),以及是否为truthy,并将对语句的第二部分求值,该部分将返回将作为参数传入的函数
例如:
var test = true && function() {};
console.log(typeof test); // "function"
与布尔操作数一起使用时,&&运算符执行布尔运算
对这两个值进行AND运算:当且仅当这两个值
它的第一个操作数和第二个操作数为true。如果其中一个或两个
如果这些操作数为false,则返回false
此运算符的实际行为稍微复杂一些。信息技术
首先计算其第一个操作数,即其左侧的表达式。如果
此表达式的值可以转换为false(例如,
如果左操作数的计算结果为null、0、“”或未定义),则
运算符返回左侧表达式的值。否则,
计算其第二个操作数及其右侧的表达式,然后返回
该表达式的值
因此,这个表达式callback&&function(){callback.call(this,target,settings);}
返回第二个匿名函数。这种语法的好处是能够在插件实例的上下文中调用callback
函数
expr1 && expr2
逻辑AND(&&
)运算符返回expr1
,如果它可以转换为false;否则,返回expr2
现在在您的示例中,callback
中的函数对象将计算为true,并使用匿名函数;如果回调
未定义,它将不会创建匿名函数并传递未定义的消息
var test = true && function() {};
console.log(typeof test); // "function"
expr1 && expr2