Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery:What';在下面的代码块中,比较的含义是什么&;函数(){callback.call();}_Javascript_Jquery - Fatal编程技术网

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(…)}正在做两件事:

  • 测试是否定义了
    回调
    ,以及
  • 如果有,请在正确的上下文中调用它
JavaScript有一个称为“短路逻辑表达式”的功能。如果逻辑表达式的一部分无法更改整体结果,则不会对其求值

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