2014-10-09 9 views
0

Я пытался злоупотребить имена функций в Chrome Дев инструментов:Функция, содержащая недопустимые символы в имени

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

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

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

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

SyntaxError: Unexpected identifier 

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

ответ

2

Вы вообще не дали функции имени. Это анонимная функция, которая присваивается свойству объекта 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) 
](); 
+0

Отличная идея. :-) * Обратите внимание, что это извращенный взлом, а не то, что вы должны делать в производственном коде. * - наверняка, все было более или менее шуткой, просто чтобы найти пределы таких имен свойств. –

 Смежные вопросы

  • Нет связанных вопросов^_^