Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   вызовы функций (https://javascript.ru/forum/css-html/77791-vyzovy-funkcijj.html)

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, спасибо большое!


Часовой пояс GMT +3, время: 09:28.