任何JavaScript语句都是表达式吗?

3
我知道像Lisp这样的函数式编程语言没有语句。在那里,一切都是表达式。JavaScript是一种函数式编程语言。所以我得出结论,每个JavaScript语句都是一个表达式。当我在玩Chrome的控制台时,这个想法涌入了我的脑海。在那里输入的每个语句都会被评估,并且如果表达式没有返回某个值,则控制台返回undefined。

http://www.2ality.com/2012/09/expressions-vs-statements.html和http://www.yaldex.com/javascript_tutorial_2/LiB0027.html。也许我误解了。 - Ian
我以前读过这篇文章。我知道语句和表达式之间的区别。但在JavaScript中,这种区别有点模糊,不是吗? - paperstreet7
5
JavaScript 不是一个真正的函数式语言。它像 Python 或者甚至 PHP 一样,有些地方是函数式编程的,比如它有 lambda 函数。 - Felix Kling
2个回答

7

5

我认为不行,因为您不能在需要表达式的地方使用任何语句:

// SyntaxError: Unexpected token var
var a = var b;

// SyntaxError: Unexpected token if
var c = if (true) {};

Chrome控制台中显示的undefined是由于其使用eval()(或本地/内部等效)来评估任何代码引起的。
var a = eval('var b;');
console.log(a); // undefined

“undefined”不是由于“var b;”的结果,而是因为“eval()”本身仍然具有返回值——无论评估的代码是否提供了它。

1
还有 throwreturnbreakcontinueswitchcasegotowhilefor... 控制语句是语句,而不是表达式。(如果你想让所有东西都成为表达式,CoffeeScript 可以做到相当接近。) - Keen
1
谢谢!我不是很喜欢将语言解释为js,但我想我会尝试一下CoffeeScript。 - paperstreet7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接