4

我刚开始通过“Eloquent JavaScript”一书学习 JavaScript,该书可在 eloquentjavascript.net 免费访问。到目前为止,我真的很喜欢这本书,只有一个部分我不明白。这是关于表达式和语句的:

http://eloquentjavascript.net/chapter2.html#p65af5913

我知道之前在 StackOverflow 上已经提到过这个话题,但是,这些是更具体的问题,而且我 - 坦率地说 - 并没有得到全部内容。

在段落的开头,作者解释了什么是表达式:如果我理解正确的话,像 42 或“23”这样的原子值被认为是表达式。如果将这些值应用于运算符(如 42 - 19),这也将被视为表达式。(我猜是因为它显然是 23,这又是一个原子值。)我这样解释:每个值——无论是直接输入还是尚未计算——都被称为表达式. 那是对的吗?

然后作者说:“存在一个比表达式更大的单元。它被称为语句。[...] 大多数语句以分号 (;) 结尾。最简单的语句是带有后面的分号。” 作为一个例子,他提到

!错误的;
作为示例语句。我的问题是“是什么让这成为一个声明?只是最后的分号?” 当我使用 JavaScript 控制台时,无论是否输入分号,都完全没有区别。它总是返回 true。然而,作者说“[A] 声明只有在它以某种方式改变了世界的情况下才有意义。” 因此,给定的示例甚至不是一个语句,因为它“只是产生 [s] 值 [...] true,然后立即将 [s it] 扔到位桶中”我现在真的很困惑......如果我没有完全把它搞砸,那么一个语句必须有一些“副作用”(比如一个变量的声明),对吧?

但是,如果有人可以解释什么是声明,我会很高兴。如果有人能举例说明这些术语的区别实际上是有用的,那也将非常有帮助,因为现在我什至无法想象作者为什么还要费心介绍这些词汇表。非常感谢您!

4

1 回答 1

4

一个简单但模糊的类比是自然语言中的文本,由组合成句子的短语组成。一个短语,比如“下雨了”,可以自己组成一个句子,比如“我不会出去。下雨了。” 或者成为更大句子的一部分,例如“可怕的天气,一直在下雨”。

也就是说,表达式和语句之间的区别在 javascript 中非常模糊。与其他类似 C 的语言不同,您不仅可以在语句中使用表达式,还可以在表达式中使用语句:

a = 1 + function(x) { if(x > 1) return 10 } (20) 

一些现代 javascript 程序,例如 Jquery,使用声明技术,基本上使它们成为一个单一的表达式。

这种模糊的区别(并不是说混淆)来自这样一个事实,即 Javascript 作为一种类似 C/pascal/algol 的命令式语言,同时受到像 Lisp 这样的函数式语言的严重影响,这些语言没有“声明”。在函数式语言中,一切都是表达式。

为了使事情更有趣,语句之间的分号(有时)是可选的,因此没有简单的方法来判断两个表达式是属于一个语句还是形成两个不同的语句。考虑:

 a = 1  // two
 !2     // statements

 a = 1  // one
 +2     // statement
于 2013-01-15T22:46:52.683 回答