Функция, содержащая недопустимые символы в своем имени
Я пытался злоупотреблять именами функций в инструментах разработчика 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)
]();