BindingIdentifier和IdentifierReference之间有什么区别

时间:2018-05-27 11:18:53

标签: ecmascript-6

让我们看一下http://www.ecma-international.org/ecma-262/#sec-expressions

如你所见:

IdentifierReference[Yield, Await]:
    Identifier
    [~Yield]yield
    [~Await]await

BindingIdentifier[Yield, Await]:
    Identifier
    [~Yield]yield
    [~Await]await

Identifier:
    IdentifierName but not ReservedWord

Identifiers (Binding and Reference)都包含相同的内容。这有什么意义?它们有什么不同?

1 个答案:

答案 0 :(得分:1)

重点是它们出现在不同的上下文中,并且具有与之相关的不同算法。

  • IdentifierReference是在表达式中使用的变量名称,使用ResolveBinding对参考进行评估
  • BindingIdentifier是一个变量名,用于创建绑定 - 在变量和函数声明中,在参数中,在解构中,在catch子句中,在for子句中等等

在他们的EarlyErrors中,IdentifierReference可能会引用evalargument,但BindingIdentifier为他们创建绑定是语法错误(在严格模式)。他们共享的唯一算法是StringValueIdentifierReferenceIsValidSimpleAssignmentTarget个支票和EvaluationBindingIdentifier有} BoundNamesBindingInitialisation程序。