Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.06.2019, 15:42
Профессор
Отправить личное сообщение для atanov Посмотреть профиль Найти все сообщения от atanov
 
Регистрация: 27.06.2016
Сообщений: 180

вызовы функций
Доброго времени суток уважаемые форумчане,
Прошу гуру объяснить поведение вызова функции.
Если просто назначить обработчик, скажем 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".
Объясните пожалуйста, в чём причина.
Ответить с цитированием
  #2 (permalink)  
Старый 21.06.2019, 17:19
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

<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>
Ответить с цитированием
  #3 (permalink)  
Старый 21.06.2019, 17:40
Профессор
Отправить личное сообщение для atanov Посмотреть профиль Найти все сообщения от atanov
 
Регистрация: 27.06.2016
Сообщений: 180

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Последовательность выполнения функций extrasens Общие вопросы Javascript 4 10.01.2020 10:39
Вывести имя полученной функции Teamur Общие вопросы Javascript 20 01.07.2017 09:11
Структурирование множества функций NO_ONE Общие вопросы Javascript 3 20.09.2016 23:38
Много js функций получается Evgeny_Dedov jQuery 4 15.07.2013 15:17
Можно ли как для произвольного массива создавать вызовы функций , имеющих на входе kefi Общие вопросы Javascript 3 17.04.2009 16:53