我有以下两个代码集。第一个警告'真实',我知道,它好。第二个警告'假',我认为会警告'!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?
答案 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
在第一个代码段中,您立即调用它,因此myVar
为false
而!false
显然为true
。
然而,在第二个片段中,您没有调用该函数。相反,myVar
现在是一个函数,它是 truthy 。也就是说,被视为 true
。再次!true = false
。
请注意,在javascript中,false
,NaN
,null
,undefined
,0
,""
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
。