Вход

Просмотр полной версии : вызовы функций


atanov
21.06.2019, 15:42
Доброго времени суток уважаемые форумчане,
Прошу гуру объяснить поведение вызова функции.
Если просто назначить обработчик, скажем click, то для передачи параметра нужно использовать возврат функции, чтобы обработчик сработал при этом самом клике. Однако при прямом вызове функции, функция не возвращается.
Вот такой пример:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<button>Тык</button>
<button>Другой Тык</button>
</body>
</html>
<script src = "207.js"></script>
document.addEventListener('DOMContentLoaded', docReady);
function docReady()
{
document.getElementsByTagName('button')[0].addEventListener('click', goOn('string'));
document.getElementsByTagName('button')[1].addEventListener('click', goThere);
}
function goOn(param)
{
return function ()
{
console.log(param);
}
}
function goThere()
{
goOn('another string');
}
При клике на первую кнопку в консоль ожидаемо попадает "string".
А при клике на вторую кнопку "another string" уже не выводится в консоль. Вроде всё должно работать goThere() запустил goOn('another string'), в goOn вернулась безымянная функция, которая должна в консоль вывести "another string".
Объясните пожалуйста, в чём причина.

Dilettante_Pro
21.06.2019, 17:19
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<button>Тык</button>
<button>Другой Тык</button>
</body>
<script>
document.addEventListener('DOMContentLoaded', docReady);
function docReady()
{
document.getElementsByTagName('button')[0].addEventListener('click', goOn('string'));
document.getElementsByTagName('button')[1].addEventListener('click', goThere);
}
function goOn(param)
{
return function ()
{

console.log(param);
}
}
function goThere()
{
goOn('another string')();
}
</script>
</html>

atanov
21.06.2019, 17:40
фу ты ч0рт, жара, пятница, надо по-пиву.
Poznakomlus, Dilettante_Pro, спасибо большое!