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