jQuery:What'在下面的代码块中比较的含义是callback&&function(){ca
jQuery: What's the meaning of comparison in following code block - callback && function() {callback.call();}
从jQuery.scrollTo.js
库中看到这个块(在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(...)};
正在做两件事:
- 测试是否已经定义了CCD_ 3
- 如果有,请在正确的上下文中调用
JavaScript有一个名为"短路逻辑表达式">的功能。如果逻辑表达式的一部分不能改变整体结果,则不会对其进行求值。
如果callback
是undefined
,那么它在逻辑表达式的上下文中计算为false(它是"falsy">(。因此,表达式变成了false && ...
的等价物,在这种情况下,...
实际上是什么不再重要,结果将始终为false†1。在这种情况下,JavaScript并不关注...
。
如果callback
是而不是undefined
(而是一个函数(,则逻辑表达式的第一部分求值为true(它是truthy">(。此时,JavaScript评估...
。整体结果恰好是一个函数表达式。函数表达式产生一个匿名函数,然后将其传递给jQuery的animate()
。
callback.call()
执行callback
,确定callback
中this
的含义。因此callback.call(this)
确保this
引用与外部函数中相同的对象。
†1
绝对正确:表达式的总体结果将不是false
,而是undefined
callback && function() {callback.call(...)};
这将检查回调是否为truthy(不是false,0,",null,undefined,NaN(,以及它是否为truth,并将计算语句的第二部分,该部分将返回将作为参数传入的函数。
示例:
var test = true && function() {};
console.log(typeof test); // "function"
当与布尔操作数一起使用时,&;运算符执行布尔运算对两个值进行AND运算:当且仅当其第一个操作数和第二个操作数为真。如果如果这些操作数为false,则返回false。
这个操作员的实际行为有些复杂。它首先计算其第一个操作数,即左侧的表达式。如果该表达式的值可以被转换为false(例如,如果左操作数的计算结果为null、0、"或未定义(运算符返回左侧表达式的值。否则,它计算其第二个操作数,即右侧的表达式,然后返回该表达式的值。
因此,该表达式callback && function(){ callback.call(this, target, settings); }
返回第二个匿名函数。这种语法的好处是能够在插件实例的上下文中调用callback
函数。
expr1 && expr2
如果逻辑AND(&&
(运算符可以转换为false,则返回expr1
;否则返回expr2
。
现在,在您的示例中,callback
中的函数对象将计算为true,并使用匿名函数;如果callback
未定义,它将不会创建匿名函数并传递undefined。
这不是一个比较。.animate()
是一个方法,因此括号中的所有项都是参数。
- jquery点击函数select&取消选择
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- Angular js-返回一个包含类似
- 一点javascript元编程&可链接的设置器
- 通过JSON&比较时间
- Jquery模板,如果xx&&如果yy
- jQuery工具验证器自定义效果-添加&消除影响
- Twitter引导程序Typeahead-Id&标签
- AngularJS&JSON-从Previous&下一个对象
- 什么是&&在没有if的行中的变量之间
- 关于引入外部javascript文件的问题&css通过https
- 指令的模板必须只有一个根元素:With restrict E&替换true
- 使用ajax的服务器端分页&jQuery
- Javascript,如果条件在没有&&逻辑运算符当&&它不起作用
- 如何使用dropzone&vueJs
- 如何准确执行加载脚本&退出弹出窗口
- 如何添加CSS&JavaScript进入Windows窗体应用程序C#.net
- Solr查询以按日期月份获取数据&年
- 显示&作为&在jsp中使用angularjs而不使用ng-bind-html
- jQuery:What'在下面的代码块中比较的含义是callback&&function(){ca