JavaScript:!需要了解它的功能(不是())

时间:2015-03-02 10:38:38

标签: javascript

我有以下两个代码集。第一个警告'真实',我知道,它好。第二个警告'假',我认为会警告'!function(){return false}'。但是,它警告'假'。第二个代码块如何警告false?有人可以帮我理解吗?

var myVar = !function(){return false}();
alert(myVar);   //true 
var myVar = !function(){return false};
alert(myVar);  //false, I dont understand this, how false can come?

3 个答案:

答案 0 :(得分:1)

第一段摘录

var myVar = !function(){ return false; }( );
// myVar = false; because invocation ----^
alert(myVar); // !false = true

第二段摘录

var myVar = !function(){return false};
// myVar = Function myVar = !(Function) and a Function is *truthy*
alert(myVar); // !true  = false

在第一个代码段中,您立即调用它,因此myVarfalse!false显然为true

然而,在第二个片段中,您没有调用该函数。相反,myVar现在是一个函数,它是 truthy 。也就是说,被视为 true。再次!true = false

请注意,在javascript中,falseNaNnullundefined0"" falsey 和其他一切都是 truthy

答案 1 :(得分:0)

你应该避免使用!function语句。当你在函数末尾使用()时,你实际上说你想使用函数的返回输出。你没有在最后一个声明中使用它。

var myVar = function(){return true}();
alert(myVar);   //true 
var myVar = function(){return false}();
alert(myVar);  //false

答案 2 :(得分:0)

这个问题已经得到了Amit joki的好答案

我在他的答案下面看了一条评论,提问者说他​​需要更多的解释,这就是我发布这个答案的原因。

第一种情况:

var myVar = !function(){ return false; }( );

alert(myVar); 

此处 myVar是匿名函数,并通过以下代码调用自身。

var myVar = !function(){ return false; }( );
  

就是这样,它是一个自动执行的匿名函数!

  

a !function()使用!函数导致它之前的运算符   被视为表达,所以我们可以称之为:

所以当我们尝试alert(myvar);

然后它会提醒myVar函数的返回值。 myVar函数已经返回false,代码中的!符号会将其转换为true

所以它会返回true

认为我们的代码如下所示

var myVar = function(){ return 10; }( );

它还会提醒true。因为在javascript中,只有false, NaN, null, undefined, 0 , ""为假,而其他都为truth

当上述代码更改为

var myVar = !function(){ return 10; }( ); 

然后它会提醒false,因为javascript中的语句return 10为真,并且false !

会转换为operator

然后在第二种情况下:

var myVar = !function(){return true};

alert(myVarz); 

这里没有自动执行匿名功能。这里只有一个匿名函数定义。当我们尝试alert(myVar)

myVar现在是一个函数truthy,因为在javascript中false, NaN, null, undefined, 0 , ""只有false而其他都是truthy。!!!

此处!还有!function(){return true};之类的功能,因此会将true转换为false

Reference1


Reference2