JavaScript中的表达式和语句

时间:2013-01-15 22:20:56

标签: javascript expression statements

我刚开始用“Eloquent JavaScript”这本书学习JavaScript,可以在eloquentjavascript.net免费访问。到目前为止,我非常喜欢这本书,只有一部分我不明白。这是关于表达和陈述的那个:

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

我知道之前在StackOverflow上已经提到了这个主题,然而,这些是更具体的问题而且我 - 坦率地说 - 没有得到整个事情。

在段落的开头,作者解释了什么是表达式:如果我理解正确,原子值如42或“23”被认为是表达式。如果将这些值应用于运算符(如42-19中),则也将其视为表达式。 (我猜因为它显然是23,这又是一个原子值。)我用以下方式解释:每个值 - 无论是直接键入还是尚未计算 - 正在叫做表达。这是正确的吗?

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

!false;
作为一个例子陈述。我的问题是“是什么使这个声明?最后只是分号?”当我使用JavaScript控制台时,无论是否使用分号输入,都没有区别。它总是返回true。然而,作者说,“[A]语句只会在某种程度上改变世界。” 所以给定的例子甚至不是一个声明,因为它“只是产生[s]值[...]是真的,然后立即将[s]扔进比特桶“我现在真的很困惑......如果我没有把它搞得一团糟在我的脑海中,一个声明必须有一些“副作用”(就像一个变量的声明),对吗?

但是,如果有人能解释一下声明是什么,我会很高兴。如果有人可以给出一个例子,其中这些术语的区别实际上是有用的,那也是非常有帮助的,因为现在我甚至无法想象为什么作者甚至不愿意介绍这些词汇。非常感谢你提前!

1 个答案:

答案 0 :(得分: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