В чем разница между двумя верхними строками javascript здесь?
HTML:
<html>
<body>
<form>
<input type="button" value="one" id="one" />
<input type="button" value="two" id="two" />
</form>
<script type="text/javascript" language="javascript" src="example.js"></script>
</body>
</html>
JavaScript:
document.getElementById('one').onclick = one();
document.getElementById('two').onclick = function() {two();}
function one(){
alert('this pops up before the button is clicked. Afterwards, the button doesn\'t work.');
}
function two(){
alert('this pops up appropriately when the button is clicked.');
}
Перед тем, как страница загрузится, Popone покажет, что кнопка становится непригодной. Всплывающее окно отображается, когда вторая кнопка нажата и работает надлежащим образом.
Разница в том, как вы передаете функцию событию onclick. Когда вы делаете =one();
он немедленно оценивает функцию и выполняет ее. Когда вы выполняете function(){two();}
, она ждет, пока щелчок не выполнит анонимную функцию, выполняющую two();
Если вместо этого вы делаете ="one();"
то он должен работать одинаково.
function(){two();}
потому что она не получает имя. Компилятор "оценивает" это - и знает, как выполнить это для нажатия кнопки. Когда компилятор пытается оценить только one()
он завершает его выполнение. Положить one();
в строку, как "one();"
компилятор будет оценивать его только при нажатии кнопки.