函數聲明可以轉換爲使用運營商類似的表達式:if語句VS函數聲明
+function(){ //it is now function expression
...
}();
但是,爲什麼if語句不能轉換爲表達式?
+if(true){ //cause an error
....
}
函數聲明可以轉換爲使用運營商類似的表達式:if語句VS函數聲明
+function(){ //it is now function expression
...
}();
但是,爲什麼if語句不能轉換爲表達式?
+if(true){ //cause an error
....
}
你不是功能轉換爲表達式。您正在評估函數(尾隨()
),其結果可用於表達式中。如果你想擁有的東西「如果類似」內嵌在你的代碼,使用三元運算:
var a = b + (x > y ? c : d);
這相當於僞代碼,你似乎興趣:
// Of course the below isn't actually legal...
var a = b + if (x > y) {
c;
} else {
d;
}
好的答案。這就是我應該這樣做...... – 2014-09-27 20:06:56
是否有任何問題與downvoting的答案,我接受錯誤的答案? – 2014-09-27 20:21:21
@ C-linkNepal:我不知道爲什麼答案是downvoted。在SO上進行降級通常是沒有意義的。 :-)(明智的人通常會附上評論,解釋downvote的原因。) – RichieHindle 2014-09-27 20:26:09
是不是真的這是JavaScript中的「函數聲明」。函數定義是表達式返回一個函數,而不是與「if
語句」同義的語句。
使用一元加號上的功能正確返回NaN
:
+function() { return "1"; }
NaN
(但如果你通話的功能,在你的榜樣,返回值將在您的表達式中使用:
+function() { return "1"; }()
1
)
如果你聲明瞭一個函數,那麼它會像'函數func(){...}'是一個語句... – 2014-09-27 20:09:06
@ C-linkNepal:你說的「函數語句」被用來做這件事是非常正確的。但它實際上是一個*表達式*,它返回一個值,而不是通常意義上的語句。 「功能說明」階段在這裏頗具誤導性。 – RichieHindle 2014-09-27 20:12:30
您不會將*函數*轉換爲表達式。您正在評估函數(使用尾部的'()'),並且其結果可以在表達式中使用。 – 2014-09-27 19:57:03
我對JavaScript沒有什麼瞭解,但我非常懷疑這是一個函數「聲明」。函數*定義*本身就是一個表達式,其類型是一個函數。函數* call *是由一個函數加'()'的子表達式組成的表達式。 「if」語句不是一個表達式,而是一個聲明。 – 0xbe5077ed 2014-09-27 19:58:05
只有沒有「if表達式」,而有函數表達式。 – Bergi 2014-09-27 19:58:46