В чем разница между BindingIdentifier и IdentifierReference - PullRequest
0 голосов
/ 27 мая 2018

Давайте посмотрим на http://www.ecma -international.org / ecma-262 / # sec-выражения

Как видите:

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 голосов
/ 27 мая 2018

Дело в том, что они встречаются в разных контекстах и ​​имеют разные алгоритмы, связанные с ними.

  • IdentifierReference - это имя переменной, которая используется в выражении, и оценивается с помощью ResolveBinding к ссылке
  • A BindingIdentifier - это имя переменной, которая используется для создания привязки - в объявлениях переменных и функций, в параметрах, в деструктуризации, в предложениях catch, в for пункты и т. д.

В своих EarlyErrors IdentifierReference может относиться к eval или argument, но BindingIdentifier, создающий для них привязку,синтаксическая ошибка (в строгом режиме).Единственный алгоритм, которым они делятся, это StringValue .IdentifierReference имеет проверку IsValidSimpleAssignmentTarget и оценку , в то время как BindingIdentifier имеет BoundNames и процедуру BindingInitialisation .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...