3

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

4

2 回答 2

7

我得出一个结论,每个 JavaScript 语句都是一个表达式

不,绝对不是。EcmaScript 标准非常清楚地区分了语句(§12)表达式(§11)

然而,您误认为表达式的是Expression Statement (§12.4),它仅由一个表达式组成(并由分号分隔)。

于 2013-05-02T21:17:41.373 回答
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()它本身仍然有一个返回值——无论评估的代码是否提供了它。

于 2013-05-02T21:17:41.707 回答