Как говорили другие, clear
- это , а не зарезервированное ключевое слово.Кажется, что вызываемая функция имеет вид document.clear
[MDN] .Вызов
console.log(clear === document.clear);
внутри обработчика события возвращает true
.
DEMO
Так что, похоже, document
находится в цепочке областей действия обработчика событий .... теперь возникает вопрос:
JavaScript: полное руководство гласит:
ВОбработчик события как атрибут HTML, объект Document находится в цепочке областей действия перед объектом Window (...)
Поскольку ваш метод является глобальным, то есть он является свойством объекта window
,он не найден в цепочке областей действия, так как document.clear
находится раньше в цепочке областей действия.
Я не нашел никакой спецификации для этого.В руководстве также сказано, что на это не следует полагаться, поэтому я предполагаю, что это не является официальным документом.
Если у вас есть элементы формы внутри формы, то даже соответствующий элемент form
будет находиться в цепочке областей действия (не уверен, правда ли это для всех браузеров).Это еще одна причина путаницы.
Существует два (не исключительных) способа избежать таких ситуаций:
Не использовать встроенное событиеобработчики. Это считается плохой практикой, поскольку смешивает логику и представление.Есть другие способы для подключения обработчиков событий.
Не загрязнять глобальное пространство имен. Создать один объектв глобальной области видимости (имя, в котором вы уверены, не вступает в противоречие с какими-либо window
или document
свойствами или идентификаторами элементов HTML), и назначьте функции в качестве свойств этого объекта.Всякий раз, когда вы вызываете функцию, вы ссылаетесь на нее через этот объект.Есть также другие способы для именования вашего кода.