JavaScript — встроенный синтаксис обратного вызова JS против внутреннего синтаксиса обратного вызова JS

Встроенный синтаксис обратного вызова JS против внутреннего синтаксиса обратного вызова JS

Давайте начнем с рассмотрения чистой версии JS.

document.getElementById('h3style').onMouseOver = changeColor; function changeColor(){ } 

Теперь в этой ситуации назначение функции — это единственное, что вы можете сделать. Очевидно, что вы можете присвоить что-то странное, например, значение, но это означает, что код ничего не делает (даже без ошибок). Дело в том, что вы не можете назначить переменную «некоторый JavaScript» для завершения, вы можете только создать функцию, которая содержит «некоторый JavaScript». Другими словами, вы не можете сделать это:

 elem.onMouseOver = 'changeColor();'; // technically legal but does nothing (just assigns a string) 

Однако в javascript есть eval() которая может выполнять строковые версии javascript. Например:

 eval('changeColor();'); 

Так что теперь к DOM. Когда вы присваиваете что-то атрибуту, вещь справа является строкой (не фактическим javascript). Поскольку это строка, за кулисами система может делать только что-то вроде eval() .

Основной вывод заключается в том, что в случае html материал, который вы пишете внутри атрибута, — это не javascript, а просто строка. Строка, которая оценивается во время выполнения и конвертируется в javascript.


Также, чтобы ответить на ваш последний вопрос: «Почему syntax(onMouseOver="changeColor;") атрибута html syntax(onMouseOver="changeColor;") не разрешен?», Ну технически это разрешено. Однако это эквивалентно делать это в JavaScript:

 onMouseOver = function(){ eval('changeColor;'); } 

Который явно не очень много.

Понравилась статья? Поделиться с друзьями:
JavaScript & TypeScript
Adblock
detector