为什么一个!函数之前没有返回布尔值相反的值?

时间:2014-08-30 18:14:12

标签: javascript iife

我正在阅读this SO question。我有点理解发生了什么,但我很困惑为什么

!function foo() {
  console.log(true) ;
}()

不会返回false

  

!function () {}()这也会返回与...相反的布尔值   函数的返回值,在这种情况下为true,因为!undefined是   真正。如果你想要实际的返回值是结果   打电话,然后尝试这样做:

“也会返回相反的布尔值”让我觉得应该返回false。为什么不呢。 alert(!true); //false

2 个答案:

答案 0 :(得分:6)

如果没有return语句,函数将返回undefined。当您将!应用于undefined时,您会获得true

尝试

console.log(!function() { return true; }());

请注意,在IIFE之前习惯使用!只是一种习惯用法。 !运算符对返回值有影响的事实几乎总是无关紧要,因为调用环境完全忽略了返回值。因此

+function() {
  // whatever
}();

实际上完全相同,即使+一元运算符与!一元运算符不同。

答案 1 :(得分:2)

具有空返回语句或不存在返回语句的函数在调用时返回未定义的值。申请!到" falsy"诸如0,null,undefined之类的值返回true。