Если написать use strict в косых апострофах, то функция не переходит в строгий режим. Верно ли это поведение?
function f() { // Нет строгого режима - всё хорошо
return 010;
}
console.log(f());
function f() { // Почему тут нет строгого режима?
`use strict`;
return 010;
}
console.log(f());
function f() { // Строгий режим, поэтому ошибка
'use strict';
return 010;
}
console.log(f());
function f() { // Строгий режим, поэтому ошибка
"use strict";
return 010;
}
console.log(f());
В соответствии с текущим стандартом это верно.
Из стандарта Директивы и "use strict"
A Use Strict Directive is an ExpressionStatement in a Directive Prologue whose StringLiteral is either the exact code unit sequences "use strict" or 'use strict'. A Use Strict Directive may not contain an EscapeSequence or LineContinuation.
StringLiteral определена как
StringLiteral:: " DoubleStringCharactersopt " ' SingleStringCharactersopt '
То что в косых апострофах называется Template Literal Lexical Components. К StringLiteral это не относится.
А так в документации написано:
A Use Strict Directive is an ExpressionStatement in a Directive Prologue whose StringLiteral is either the exact character sequences "use strict" or 'use strict'. A Use Strict Directive may not contain an EscapeSequence or LineContinuation.
P.S. Вопрос на инглише https://stackoverflow.com/q/5214391/5441700
Сборка персонального компьютера от Artline: умный выбор для современных пользователей