之前这个问题没有描述清楚,抱歉!我的疑问点并不是我不知道这个 && 符号的意思。而是让callback执行,为什么又调用一个什么都不传的callback.call()。我不清楚后者有什么用~~
之前这个问题没有描述清楚,抱歉!我的疑问点并不是我不知道这个 && 符号的意思。而是让callback执行,为什么又调用一个什么都不传的callback.call()。我不清楚后者有什么用~~
&& 这个符号,前面语句为 false 时候 后面的就不会执行。
当 callback 为 null undefined 之类的时候,callback.call()就不会执行了,当 callback 有值的时候才执行后面的语句。
if(callback){
callback.call(undefined);
}
&&
是短路操作,下图是我个人的总结:call
的第一个参数绑定函数调用的this
,参数为空,实际就是undefined
。callback
参数是可以缺省的,在不传入callback
参数的情况下,由于&&
短路操作也不会报错10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
因为逻辑运算符
&&
||
通常具有短路求值的特性即,如果只求部分值就可以得到整个表达式的值,那么剩下的部分就不会再被求值。
例如:
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()
这个写法不是很推荐使用在业务代码里。