2014-09-27 114 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