这个问题已经从阿米特条既纳一个不错的答案
我读了下面他的回答有一个评论提问是说,他需要更多的解释,这就是为什么我张贴这个答案。
第一种情况:
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};
搜易得功能将转换true
到false
藻体。
Reference1,
Reference2
它与包含函数的myVar无关。即使没有()最后,!将第二个示例从函数声明转换为函数表达式,因为JavaScript认为它需要找到某个东西的逆。请参阅http://stackoverflow.com/questions/13341698/javascript-plus-sign-in-front-of-function-name – 2015-03-03 12:45:05
@DaveRoss感谢您的有效建议,我已经更新了我的答案 – 2015-03-03 12:58:20