Вы искали в правильном месте.Связанная спецификация даже предлагает примечание относительно того, почему (emp. Mine):
NOTE 2 Каждый TemplateLiteral в программном коде область связана с уникальным объектом шаблона, который используется при оценке тегированных шаблонов ( 12.2.9.6 ). Объекты шаблона заморожены и один и тот же объект шаблона используется каждый раз, когда оценивается определенный помеченный шаблон.
Если вы хотите понять фактическое выполнение, сначала посмотрите на семантику выполнения тегированных шаблонов, указанную в Раздел 12.3.7.1 :
12.3.7.1 Семантика времени выполнения: оценка
Выражение участника: TemplateExpression TemplateLiteral
[…]
Вернуть?
EvaluateCall (
tagFunc ,
tagRef ,
TemplateLiteral ,
tailCall ).
Если вы посмотрите на абстрактную операцию EvaluateCall :
12.3.4.2 Семантика времени выполнения: EvaluateCall ( func , ref , аргументы , tailPosition )
[…]
Итак, при вызове функции тега с шаблономЛитерал, ArgumentListEvaluation для TemplateLiteral передается в качестве аргумента функции тега.Взгляните на ArgumentListEvaluation :
12.2.9.3 Семантика времени выполнения: ArgumentListEvaluation
TemplateLiteral: NoSubstitutionTemplate
[...]
Просмотр операции GetTemplateObject мы видим виновника:
12.2.9.4 Семантика времени выполнения: GetTemplateObject ( templateLiteral )
[…]
Где шаблон - массив, переданный вфункция тега.Мы видим, что он явно заморожен.Если вы хотите пройти уровень глубже, см. SetIntegrityLevel :
7.3.14 SetIntegrityLevel ( O , level )
Абстрактная операция SetIntegrityLevel используется для исправления набора собственных свойств объекта.Эта абстрактная операция выполняет следующие шаги:
[…]
Пусть статус будет? O . [[PreventExtensions]] ().
И, взглянув на [[PreventExtensions]] обычного объекта, мывидим, что вызывается операция OrdinaryPreventExtensions :
9.1.4.1 OrdinaryPreventExtensions ( O )
Когда абстрактная операция OrdinaryPreventExtensions вызывается с ObjectO, предпринимаются следующие шаги:
- Установить O . [[Extensible]] на false .
- Return правда .
Таким образом, внутренний слот [[Extensible]] явно установлен на false.