为什么这一行:
true && function() {console.log("aaa");}()
打印
AAA 未定义
但 这一行:
true || function() {console.log("aaa")}()
打印
真
我很好奇发生了什么事? 为什么函数执行了?
答案 0 :(得分:2)
输入true && false
,结果将为false
。这意味着它正在检查条件并打印第二个条件。
输入true || false
,结果将为true
。这意味着只要第一个条件评估为真,它就不会检查第二个条件并打印第一个条件。
这解释了打印的内容。
您的第一个案例:
当你输入true && function() {console.log("aaa");}()
时,它也正在评估第二个条件,并且因为你的第二个条件是一个可调用函数[你最后使用()
],其结果即“ aaa“印刷。
最后不要使用()
,即输入true && function() {console.log("aaa");}
,结果将是您的第二个条件function () {console.log("aaa");}
你的第二个案例:
当您输入true || function() {console.log("aaa")}()
时,您的第一个条件本身变为真,因此不评估第二个条件,因此仅打印为真。
答案 1 :(得分:1)
第一个是评估两个条件,因为第二个参数(匿名函数)是......匿名的未定义。
||
运算符只是在他的第一个参数(true
)上求值为true,因此它只打印true
答案 2 :(得分:1)
这是因为&&
运算符是逻辑连词(and
)。对于语句,两个操作数都需要true
为true
。
同时||
是逻辑分离(or
)。即使只有一个操作数为true
,它也会是true
。
当逻辑disjunciton(or
)发现第一个操作数为true时,不需要再查看它,它只能返回true。
答案 3 :(得分:1)
而&&逻辑运算检查两个表达式以评估为真,||操作员只需要一个是真的。所以在第一种情况下,由于第一个表达式的计算结果为true,它会检查另一个表达式(函数),这就是函数运行的原因。在第二种情况下,第一个表达式的计算结果为true,这就是它所需要的所有内容。它停在那里。
答案 4 :(得分:0)
在JavaScript &&
和||
操作中使用short-circuiting。一旦结果完全确定,它就会停止评估,并且不会评估其余部分。
例如,将您的第一个样本更改为:
false && function() {console.log("aaa");}()