Всем привет. Помогите понять функции. Я совсем запутался с
return, с замыканиями, с
function expression и
function declaration. Весь день пробую вернуть значение из функции, перебирая разные варианты. Вроде бы знаю, как надо, в видео и гугле есть примеры, но когда подстраиваю под свои нужды - уже не работает. Я просто не до конца понимаю принципы работы функций и
return.
вот есть функция и её вызов. Почему вот так не работает ?
$('#button').on('click', test);
function test() {
var sum = 10;
var res = function() {
console.log(sum);
}
return res;
};
test();
А вот так работает
function test() {
var sum = 10;
var res = function() {
console.log(sum);
}
return res;
};
var newTest = test();
$('#button').on('click', newTest);
Я просто добавил функцию
test() в переменную
newTest и теперь событие
click вызывает
newTest
И вот так работает :
function test() {
var sum = 10;
var res = function() {
console.log(sum);
}
return res;
};
var newTest = test();
$('#button').on('click', test());
Теперь при клике я вызываю
test() со скобками (в отличие от
newTest - без скобок - в предыдущем примере), но она не срабатывает сразу, а только после клика. Хотя, вроде бы, если я указываю
test() на обработчик, то должна сразу вызываться..
Вот так не работает :
var test = function() {
var sum = 10;
var res = function() {
console.log(sum);
}
return res;
};
$('#button').on('click', test);
Если вызвать её через :
console.log(test()); то вернётся описание функции
res() (или переменной со ссылкой на эту функцию);
А если вызвать
console.log(test); - без скобок, то вернётся описание функции
test(). Хорошо, здесь что-то более менее понятно, что результатом работы функции
test() является функция
res(). Если просто вызвать
test без скобок - вернётся описание
test. Если со скобками - функция выполнится, а её результатом является описание функции
res(). Но куда делся
console.log(sum) ?
Вот ещё пример. Здесь я не указываю скобки и всё работает. И работает
click с вызовом функции
test().
function test() {
var sum = 10;
console.log(sum);
};
$('#button').on('click', test);
Или вот так :
function test() {
var sum = 10;
console.log(sum);
};
var newTest = test;
$('#button').on('click', newTest);
Получается не важно, буду я вызывать при клике
test или
newTest ?
Правильно понимаю, что лучше использовать второй вариант ?
Вроде гипотетически понятно, как возвращается, но когда пытаешься результат функции присвоить переменной, чтобы потом эту переменную использовать для сложения суммы с другими переменными - ничего не получается.
Заранее спасибо за ответы