callback&&callback.call() 什么意思?

之前这个问题没有描述清楚,抱歉!我的疑问点并不是我不知道这个 && 符号的意思。而是让callback执行,为什么又调用一个什么都不传的callback.call()。我不清楚后者有什么用~~

clipboard.png

阅读 4.8k
4 个回答

因为逻辑运算符&& ||通常具有短路求值的特性
即,如果只求部分值就可以得到整个表达式的值,那么剩下的部分就不会再被求值。
例如:
f()&&g(),如果f()为false,那么g()无论为何,整个表达式都会是false,因此g()不会被求值(不会被执行)
f()||g(),如果f()为true,那么g()无论为何,整个表达式都会是true,因此g()不会被求值(不会被执行)


根据这个特性,可以做一些逻辑的简写
比如if(xxx) {yyy} 就可以写成 xxx && yyy
if(!xxx) {yyy} 就可以写成 xxx || yyy

因此callback&&callback.call() 就是 if(callback) callback.call()


这个写法不是很推荐使用在业务代码里。

执行callback的意思,只是call没有传入参数,如果传入了参数,第一个参数就是函数执行的时候this指向的值

&& 这个符号,前面语句为 false 时候 后面的就不会执行。
当 callback 为 null undefined 之类的时候,callback.call()就不会执行了,当 callback 有值的时候才执行后面的语句。

  • 翻译:相当于
if(callback){
    callback.call(undefined);
}
  • 原来的写法中的&&是短路操作,下图是我个人的总结:

图片描述

  • call的第一个参数绑定函数调用的this,参数为空,实际就是undefined
  • 这样写的原因是callback参数是可以缺省的,在不传入callback参数的情况下,由于&&短路操作也不会报错
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题