Насколько я могу судить, согласно быстрому исследованию, это ошибка в браузере.
Согласно стандарту HTML [1], такие встроенные обработчики должны инициализироваться браузером с помощью FunctionCreate
где Scope
назначается следующим образом:
Если элемент не равен нулю, пусть Scope
будет NewObjectEnvironment(element, Scope)
.
Давайте расшифруем это, обратившись кспецификация языка ECMAScript 2019 [2].По-видимому, NewObjectEnvironment(element, Scope)
создает новую лексическую среду, в которой изначально определенные имена переменных берутся из объекта, переданного в качестве первого аргумента - element
.Представьте себе, что вы берете все свойства element
(объект Element), перебираете их (независимо от того, перечислимы они или нет) и помещаете их в переменные, названные в честь этих свойств.Спецификация описывает это следующим образом:
Каждый объект Environment Record связан с объектом, называемым его объектом привязки.Запись среды объекта связывает набор имен строковых идентификаторов, которые непосредственно соответствуют именам свойств его объекта привязки.
Следовательно, создается впечатление, что обратный вызов, созданный из строки в onclick
, должендействительно, все свойства вашего <select>
элемента доступны в области действия , включая id
.
Список литературы:
- https://html.spec.whatwg.org/multipage/webappapis.html#handler-onclick
- https://tc39.github.io/ecma262/#sec-newobjectenvironment