2015-03-02 62 views
2

我有以下两个代码集。第一次警报'真',我知道,它的好。第二个提醒'错误',我认为会提醒'!function(){return false}'。但是,它提醒'错误'。第二个代码块如何提醒false?有谁能帮我理解吗?JavaScript:!需要了解它的功能(not())

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

这个问题已经从阿米特条既纳一个不错的答案

我读了下面他的回答有一个评论提问是说,他需要更多的解释,这就是为什么我张贴这个答案。

第一种情况:

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因为语句return 10在JavaScript是真实的,它会通过!operator

然后,在第二种情况下转化为false

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

alert(myVarz); 

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

myVar现在是一个函数,这是因为truthy在JavaScript中只有false, NaN, null, undefined, 0 , ""false等都是truthy。!

在这里也!进来像!function(){return true};搜易得功能将转换truefalse藻体。

Reference1


Reference2

+0

它与包含函数的myVar无关。即使没有()最后,!将第二个示例从函数声明转换为函数表达式,因为JavaScript认为它需要找到某个东西的逆。请参阅http://stackoverflow.com/questions/13341698/javascript-plus-sign-in-front-of-function-name – 2015-03-03 12:45:05

+0

@DaveRoss感谢您的有效建议,我已经更新了我的答案 – 2015-03-03 12:58:20

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

+0

我需要更多这方面的说明一下,你能吗? – User123 2015-03-02 10:45:12

+0

@ User123你不明白什么? – 2015-03-02 10:45:34

0

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

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