gpt4 book ai didi

javascript - Mozilla 声明表达式也是语句。为什么?

转载 作者:行者123 更新时间:2023-11-29 16:14:50 25 4
gpt4 key购买 nike

查看 Mozilla 的 JavaScript 指南中的这些文章:

Expressions

Statements

表达式也被认为是赋值语句。事实上,在第二篇文章中可以读到“任何表达式也是一个语句”。熟悉其他编程语言后,我认为表达式始终是值,但它们永远不会像语句那样产生副作用。换句话说,7、7 + 8、“string”等是表达式,因为它们不改变状态,但是 a = 7 是一个语句,因为现在已经定义了一个变量(即状态已经改变).

为什么 Mozilla 不区分 JS 中的两者?

最佳答案

我相信您对“表达”和“陈述”这两个词的理解过于字面意思了。 “表达式不改变任何状态”是对编程语言的一个非常严格的要求。

一个思想实验:在 7 + 8 中用函数调用替换 8

var globalVar = 0;
function my8() {
globalVar = globalVar + 1;
return 8;
}

7 + my8() 是语句还是表达式?这里没有发生明显的状态变化,但 my8 仍然执行状态变化。使用“无副作用”定义,如果不分析 my8 函数的代码,就不可能确定 7 + my8() 是语句还是表达式。当然,可以简单地禁止任何状态更改作为函数调用的一部分,但这不是 JavaScript 的方式。

根据我的经验,大多数语言将“所有返回值的东西”定义为表达式和语句,其他所有东西都只是一个语句。

要回答您的问题“为什么 Mozilla 不区分 JS 中的两者?”:

我认为他们会这样做,但不是以您预期的方式。要考虑“返回值的一切”,表达式似乎是最实用的方法。

另外,一段代码同时是语句和表达式之间并不矛盾。这就是 Javascript 和许多其他语言的工作原理。当然,总是可以在这两者之间划一条更严格的界限。

示例:

赋值返回值,所以这是可能的:

 a = b = c = 1;

可以写成更明显的形式:

 a = (b = (c = 1));

正因为如此,赋值被认为是一个表达式(也是一个语句)。

另一方面:

if (true) { };

不返回值(在 Javascript 中!)因此不是表达式(但仍然是语句)。

关于javascript - Mozilla 声明表达式也是语句。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18329613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com