gpt4 book ai didi

javascript - 变量声明的 Mac 终端 Node REPL 输出

转载 作者:行者123 更新时间:2023-11-30 14:42:14 24 4
gpt4 key购买 nike

在 Mac (OS X 10.13.3) 终端中,当我输入 Node (v8.10.0) 的 REPL 并输入以下各行时,我得到指示的输出:

> let a = 'abc'
undefined

> const b = 'abc'
undefined

> var c = 'abc'
undefined

> d = 'abc'
'abc'

为什么前三个与最后一个之间的输出不同?

我知道,在 ES5 非严格模式下,var x = 1x = 1 会导致不同的变量范围,但我怀疑这不是这里的问题.

我也明白 d = 'abc' 不再是 JavaScript 的最佳实践,甚至不允许在 ES5 严格模式中使用。但是,我只是想了解行之间的句法差异和/或 Node REPL 如何解释输入。这与语句与表达式(或定义或赋值或声明或...)有关吗?

(我尝试搜索 StackOverflow,但未在题为 'node.js displays “undefined” on the console''node.js REPL “undefined”' 的问题中找到答案。我在 Node.js v8.10.0 Documentation section for REPL 中也找不到答案。在 Google 中搜索,比如说,node repl "return value" 等也无济于事。)

最佳答案

tl;dr

前两个(letconst)是LexicalDeclaration秒。下一个 (var) 是 VariableStatement .最后一个是 AssignmentExpression .

LexicalDeclarationVariableStatement 没有返回值。 AssignmentExpression 有。详情如下。


详情

从第三个开始,以var identifier = expression为例。这是一个VariableStatement .它的评估语义在规范中表达如下:

Semantics

The production VariableStatement : var VariableDeclarationList ; is evaluated as follows:

  1. Evaluate VariableDeclarationList.
  2. Return (normal, empty, empty).

注意表达式返回中的。同样的事情不会发生在 assignments (see the Return part) 中。 .

关于 let and const declarations , 关于 their evaluation :

13.3.1.4 Runtime Semantics: Evaluation

LexicalDeclaration : LetOrConst BindingList ;

  1. Let next be the result of evaluating BindingList.
  2. ReturnIfAbrupt(next).
  3. Return NormalCompletion(empty).

同样,空(undefined)在正常完成时返回。 (例如,当变量已经被声明时突然发生。)


最后一个是 AssignmentExpression .它评估(返回)一个值。例如,采用最简单的形式,Simple Assignment , 评估规范:

The production AssignmentExpression : LeftHandSideExpression = AssignmentExpression is evaluated as follows:

    1. Let lref be the result of evaluating LeftHandSideExpression.
      ...
    1. Return rval.

注意值的返回。

关于javascript - 变量声明的 Mac 终端 Node REPL 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49470717/

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