Пусть у нас есть простой скрипт:разрешения Identifier и простое задание
obj=new String('str');//1
obj.length;//2
В строке 1 мы имеем простое задание, которое вычисляется следующим образом:
- Оценка ПервичноеВыражения: идентификатор (
obj
в моем случае).(undefined, obj, false)
будет возвращен как результат. - Оценка NewExpression
new String('str');
. Обозначим результат evalution отrref
GetValue(rref)
- Ввод значения получения на шаге 3, приведенной в справочном получения на шаге 1.
- Обратный результат шага 4.
На этой линии obj-->'str'
привязок Doesnt добавить к среде запись любого исполнения. Но когда obj
PrimaryExpression:Identifier
будет оцениваться как ('str', obj, false)
типа Refernce, и мы можем получить свойство 'str'
по этой ссылке.
Вопрос:
Почему PrimaryExpression:Identifier
obj
в строке 2 будет оцениваться как ('str', obj, false)
?
Точно, 'PutValue (V, W)' где 'IsUnresolvedReference (V)' возвращает 'true' добавленное свойство для глобального объекта с' GetReferencedValue (V) 'как имя свойства и' W' как значение. Запись окружения глобального объекта - это запись об объектной среде, поэтому добавление свойств к «глобальному» добавляет соответствующую привязку. Надеюсь, теперь мое понимание правильное. –