這個問題已經從阿米特條既納一個不錯的答案
我讀了下面他的回答有一個評論提問是說,他需要更多的解釋,這就是爲什麼我張貼這個答案。
第一種情況:
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