3 个回答

哪里怪异了?

我猜你是想问短路求值吧。

a()&&b();

这句话从表面上理解,纯粹就是两个函数返回值的“与”运算而已。
函数没有返回值的时候,默认返回undefined,而undefined会被认为是false
在“与”运算中,根据运算规则,从左往右一旦遇到false,那么整个式子的求值就会结束,直接返回false

所以回到你这个例子中,函数a首先运行,返回undefined,求值结束,函数b不会运行。

逻辑与 (&&)
expr1 && expr2 如果expr1 能转换成false则返回expr1,否则返回expr2. 因此, 在Boolean环境中使用时, 两个操作结果都为true时返回true,否则返回false.

短路计算

由于逻辑表达式的运算的顺序是从左到右,也可以用以下规则进行"短路"计算:

  • false && (anything) 短路计算的结果为false.

  • true || (anything) 短路计算的结果为 true.

该规则确保这些计算的准确性. 注意如果上述表达式中的 anything 部分不能被计算的话, 两边都不会生效.还需要注意的是,上述表达式中的 anything 部分是任意的单个逻辑表达式(小括号中).

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Logical_Operators#Short-Circuit_Evaluation

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题