2014-09-27 68 views
-3

函數聲明可以轉換爲使用運營商類似的表達式:if語句VS函數聲明

+function(){ //it is now function expression 
... 
}(); 

但是,爲什麼if語句不能轉換爲表達式?

+if(true){ //cause an error 
.... 
} 
+2

您不會將*函數*轉換爲表達式。您正在評估函數(使用尾部的'()'),並且其結果可以在表達式中使用。 – 2014-09-27 19:57:03

+1

我對JavaScript沒有什麼瞭解,但我非常懷疑這是一個函數「聲明」。函數*定義*本身就是一個表達式,其類型是一個函數。函數* call *是由一個函數加'()'的子表達式組成的表達式。 「if」語句不是一個表達式,而是一個聲明。 – 0xbe5077ed 2014-09-27 19:58:05

+0

只有沒有「if表達式」,而有函數表達式。 – Bergi 2014-09-27 19:58:46

回答

1

你不是功能轉換爲表達式。您正在評估函數(尾隨()),其結果可用於表達式中。如果你想擁有的東西「如果類似」內嵌在你的代碼,使用三元運算:

var a = b + (x > y ? c : d); 

這相當於僞代碼,你似乎興趣:

// Of course the below isn't actually legal... 
var a = b + if (x > y) { 
    c; 
} else { 
    d; 
} 
+0

好的答案。這就是我應該這樣做...... – 2014-09-27 20:06:56

+0

是否有任何問題與downvoting的答案,我接受錯誤的答案? – 2014-09-27 20:21:21

+0

@ C-linkNepal:我不知道爲什麼答案是downvoted。在SO上進行降級通常是沒有意義的。 :-)(明智的人通常會附上評論,解釋downvote的原因。) – RichieHindle 2014-09-27 20:26:09

-1

是不是真的這是JavaScript中的「函數聲明」。函數定義是表達式返回一個函數,而不是與「if語句」同義的語句。

使用一元加號上的功能正確返回NaN

+function() { return "1"; } 
NaN 

(但如果你通話的功能,在你的榜樣,返回值將在您的表達式中使用:

+function() { return "1"; }() 
1 

+0

如果你聲明瞭一個函數,那麼它會像'函數func(){...}'是一個語句... – 2014-09-27 20:09:06

+0

@ C-linkNepal:你說的「函數語句」被用來做這件事是非常正確的。但它實際上是一個*表達式*,它返回一個值,而不是通常意義上的語句。 「功能說明」階段在這裏頗具誤導性。 – RichieHindle 2014-09-27 20:12:30