gpt4 book ai didi

javascript - ECMAScript 中的 VariableStatement 语义

转载 作者:数据小太阳 更新时间:2023-10-29 06:08:51 26 4
gpt4 key购买 nike

生产变量语句:

var VariableDeclarationList ; 

评估如下:

  1. 评估 VariableDeclarationList
  2. 返回(normal, empty, empty)

我想知道normal和empty的意思。

最佳答案

ECMAScript 描述了一个内部类型来解释语句的行为,它叫做 The Completion Specification Type .

Completion 类型的值是 (type, value, target) 形式的三元组,其中:

  • type 可以是 normalbreakcontinuereturn抛出
  • value 可以是任何语言值或
  • target 可以是任何Identifier

VariableStatement 的情况下,返回的完成没有可观察到的效果,它是一个正常完成,因为控制流未修改。

其他返回正常完成语句,例如一个空的 Block statement , Empty Statement , ExpressionStatement , debugger statement (当没有附加调试器时)等...

A FunctionDeclaration (这不是一个声明,而是一个 SourceElement )也返回一个 (normal, empty, empty) 完成,这就是为什么例如:

eval("function f(){}"); // returns undefined

eval function执行代码后,检查完成结果,如果类型为normal且值为empty,则显式产生undefined(见步骤eval 中的 7 个),而:

eval("(function f(){})"); // returns a function object

括号构建了一个 PrimaryExpression ,它是 ExpressionStatement 的一部分, 此语句返回完成 (normal, GetValue(exprRef), empty),其中 expRef 将是 FunctionExpression 的值。

如果完成 type 不是 normal 也称为“突然完成”。

例如:

function foo() {
return 5;
}
foo();

foo 中的 return 语句将生成类似于 (return, 4, empty) 的完成。

三元组中的target 值仅供breakcontinue 使用,以引用LabelledStatement 的标识符,例如:

foo: while(true) {
while(true) {
break foo;
}
}

上述 break 语句的完成结果将是 (break, empty, foo),因为控制流是从第二个 while 中转移的 到外部,在 foo 标签的级别。

您可以在执行非本地 控制转移的所有其他语句上看到有关如何使用此内部类型的更多详细信息,如 break , continue , returnthrow .

关于javascript - ECMAScript 中的 VariableStatement 语义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3957284/

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