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