Является javascript `return` действительно ключевым словом *?

этот snip будет работать без каких-либо жалоб на обоих узлах и в браузере:

this.return = function ( x ) { 
    return x 
};

console.log ( this.return(1) );

Я ожидал, что он будет терпеть неудачу с синтаксической ошибкой.

Я имел в виду, я могу понять, почему работает this['return']. Но я всегда, хотя return был ключевым словом lexer?

является javascript контекстно-зависимым языком?

добавлен: дело в том, что лексер не имеет токена T_RETURN, но вместо этого использует T_STRING. Разве нет?

Ответ 1

return - зарезервированное ключевое слово, но зарезервированные ключевые слова могут использоваться как accessers без проблем, это просто плохая практика для этого.

Зарезервированные ключевые слова могут не использоваться в качестве имен для переменных, функций, методов или идентификаторов для массивов и объектов, поскольку ECMAScript определяет для них особое поведение:

Исходный текст из сценариев ECMAScript сканируется слева направо и преобразуется в последовательность элементов ввода, которые являются токенами, управляющими символами, терминаторами строк, комментариями или пробелами.

ECMAScript также определяет определенные ключевые слова и литералы и имеет правила автоматической вставки точек с запятой для завершения операторов.

Зарезервированные слова применяются только к идентификаторам (по сравнению с именами идентификаторов).
Как описано в ES5, это все Идентификационные имена, которые не исключают ReservedWords.

a.return
a["return"]
a = { return: "test" }.

Однако это не

function return() {}
var return;

Подробнее о MDN

Ответ 2

Да, return - это ключевое слово. Вы определили свойство и по существу использовали строку с именем return. Если бы вы действительно использовали return, это вызвало бы ошибку

var return = "error";//Uncaught SyntaxError: Unexpected token return