Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Почему в некоторых случаях функцию события нужно обвертывать в анонимную функцию (https://javascript.ru/forum/misc/31081-pochemu-v-nekotorykh-sluchayakh-funkciyu-sobytiya-nuzhno-obvertyvat-v-anonimnuyu-funkciyu.html)

Jeremen 26.08.2012 16:01

Почему в некоторых случаях функцию события нужно обвертывать в анонимную функцию
 
Делал это задание и создал свою функцию
function count(quantity, period, capitalization) {
		if (quantity.charAt(0) == 0 || quantity < 0) return;
		if (capitalization) {
			var sum = quantity * Math.pow(1.12, period / 12);
		} else {
			var sum = +quantity + quantity * 0.12 *  period / 12;
		}
		if (!sum) return;
		was.innerHTML = quantity;
		will.innerHTML = sum;
		willGraph.style.height = sum / quantity * 100 + 'px';
	}

Так вот когда я вешаю функцию на событие change инпута, вот так(инпут.onchange = count(передаю параметры)) то всё работает нормально. Но когда вешаю функцию на событие change селекта, то для того что бы оно заработало функцию привязывать к событию нужно обернув в анонимную функцию, вот так(селект.onchange = functio() {
count(передаю параметры)
})
Подскажите пожалуйста в почему так происходит?

bes 26.08.2012 16:17

Цитата:

Сообщение от Jeremen
вот так(инпут.onchange = count(передаю параметры))

при такой передаче произойдёт вызов count с переданными параметрами и onchnage присвоится результат этого вызова
<input>

<script>
function f(a) {
	alert(a);
}

document.body.children[0].onchange = f('text');
</script>

Если возвращается функция, то всё нормально
<input>

<script>
function f(a) {
	alert(a);
	return function () {f(a)}
}

document.body.children[0].onchange = f('text');
</script>

Jeremen 26.08.2012 16:27

bes, то есть если функция не возвращает функцию то её нужно обвертывать что бы работало? :)

bes 26.08.2012 16:34

обработчиком назначается функция, поэтому функцию и нужно присваивать, функцию с параметрами проще всего передавать именно таким образом, так как скобки () - приводят к вызову функции


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