Функция, содержащая недопустимые символы в своем имени

Я пытался злоупотреблять именами функций в инструментах разработчика Chrome:

window["hello world"] = function () { console.log("Hello World!"); }

Строка выше создаст hello world глобальная функция.

Это появляется в предложениях автозаполнения также:

Если мы называем это так (hello world()) мы получаем синтаксическую ошибку, которая должна быть такой:

SyntaxError: Unexpected identifier

Тем не менее, как мы можем вызвать эту функцию без использования кавычек (window["hello world"]())?

1 ответ

Решение

Вы не дали функции имя вообще. Это анонимная функция, которая присваивается свойству window объект.

Поскольку в имени свойства есть пробелы, вы не можете получить к нему доступ с помощью идентификатора, поэтому единственный способ получить к нему доступ - это явно использовать объект окна.

window["hello world"]();

Если вы действительно хотите запустить функцию без кавычек, то вы можете сделать следующее. Обратите внимание, что это извращенный взлом, а не то, что вы должны делать в рабочем коде.

window["hello world"] = function () { console.log("Hello World!"); }
// No quotes for any of the code used to access the above.
window[
    [ 104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100 ].map(
        function (currentValue) {
            return String.fromCharCode(currentValue);
        }
    ).join(new String)
]();
Другие вопросы по тегам