2014-09-27 54 views
-1

我們可以假裝使用一元運算符作爲IIFE象下面這樣:IIFE與一元運算符:現實世界中使用的情況下

+function(){ 
    return 5; 
}();//5 


-function(){ 
    return 5; 
}();//-5 


~function(){ 
    return 5; 
}();//-6 


!function(){ 
    return 5; 
}();//false 

那麼,有沒有實際使用情況下,這樣的IIFE或者我們應該避免使用IIFE通過使用一元運算符,只使用真正的IIFE:

(function(){ 
    return 5; 
}()); //5 
+1

它絕對沒有區別,所以使用你認爲最美麗的一個。 – Pointy 2014-09-27 18:53:45

+0

使用一元運算符會在返回結果時產生差異,所以我認爲必須有編程之美... – 2014-09-27 18:54:55

+0

所有這些代碼段都執行完全相同的操作:運行該函數並丟棄結果。一元運算符(或周圍的括號)是需要它來工作的,但它們都做同樣的事情。 – Pointy 2014-09-27 18:55:53

回答

0

我的IDE不愉快關於+function()件事:

enter image description here

等等JSLint和JSHint。這是更好地避免這樣的,因爲結構:

  • 他們混淆
  • 他們混淆了IDE和驗證器
  • 你不能從這樣的IIFE返回任何有意義的閱讀器(例如,一個對象,這是迄今爲止最常見的用例)。
-1

對操作員使用IIFE的唯一好處是如果我忘記使用不會導致問題的尾部分號。

但是,如果我忘記使用尾隨分號這將是一個問題,但沒有運算符的情況下使用IIFE。

(function(){ 
... 
}()) //no semi-colon 
(function(){ 
... 
}()); 

上述代碼將被解釋爲函數調用。 (第一IIFE將被調用的函數和第二將是參數)


由於作爲@georg答案有一個從這樣IIFE在大多數使用情況下,沒有有意義的回報,我會選擇使用IIFE與運營商。

+1

我不知道爲什麼這是被低估了。英文不完美,但答案是正確的:JavaScript中的((fn-expr))可以按照ASI規則與前一行連接,這是危險的;一般來說,建議您在用括號或括號打開的行之前手動包含分號*。在IIFE的情況下,括號的唯一目的是強制函數*表達式* - 解析而不是*語句* - 解析;並且使用一元運算可以在ASI環境中比parens更可靠地實現這一點。 – ELLIOTTCABLE 2016-02-21 03:34:55

+0

@ELLIOTTCABLE我猜這是因爲聲明「如果我忘記使用不會導致問題的尾隨分號」而被低估。使用混亂的非標準黑客來規避分號的需要似乎有點瘋狂。 – Dan 2016-05-26 13:49:04

+0

這不是瘋了,丹,這是完美的標準做法。查看僅包含一個UnaryExpression的StatementListItems的大型JavaScript項目。 (另外,請不要使用'瘋狂'這樣的詞作爲貶義詞;它是幹練的,非常糟糕的。) – ELLIOTTCABLE 2016-05-26 14:00:06

相關問題