函数声明可以转换为使用运营商类似的表达式: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