我正在阅读this SO question。我有点理解发生了什么,但我很困惑为什么
!function foo() {
console.log(true) ;
}()
不会返回false
。
!function () {}()
这也会返回与...相反的布尔值 函数的返回值,在这种情况下为true,因为!undefined是 真正。如果你想要实际的返回值是结果 打电话,然后尝试这样做:
“也会返回相反的布尔值”让我觉得应该返回false
。为什么不呢。 alert(!true); //false
答案 0 :(得分:6)
如果没有return
语句,函数将返回undefined
。当您将!
应用于undefined
时,您会获得true
。
尝试
console.log(!function() { return true; }());
请注意,在IIFE之前习惯使用!
只是一种习惯用法。 !
运算符对返回值有影响的事实几乎总是无关紧要,因为调用环境完全忽略了返回值。因此
+function() {
// whatever
}();
实际上完全相同,即使+
一元运算符与!
一元运算符不同。
答案 1 :(得分:2)
具有空返回语句或不存在返回语句的函数在调用时返回未定义的值。申请!到" falsy"诸如0,null,undefined之类的值返回true。