@mvr1976
Учу html, css, js

Как правильно вызвать callback — функцию?

Всем добрый вечер!
У меня теоретический вопрос, не могу понять синтаксис и логику использования коллбэк-функций. Все что нагуглил - обмусоливает одни и те же примеры и не дает мне понимания следующих моментов:
var func = function(callback){
		var name = "Max";
		callback(name);
	};
func(function(n){
		console.log("Hi " + n);
	});


1) Переменной funk передается анонимная функция с аргументом в виде коллбэк-функции. Так? Дальше.
В основной функции: 1)объявляется переменная name 2)вызывается коллбэк-функция с аргументом name...
Но она ведь еще не описана? Или это не вызов функции, а что-то другое? Что?


2) Вызываем func(); с коллбэком в виде анонимной функции с аргументом n. При выводе в консоль оказывается, что n получил значение переменной name из объявления функции func. Из чего это следует? Как связаны n и name?

Заранее благодарю за ответы. Вопрос изрядно путаный, но на то он и вопрос, а не ответ.
  • Вопрос задан
  • 2049 просмотров
Пригласить эксперта
Ответы на вопрос 3
@dixoNich
frontend developer
У функций есть параметры

function fn (a, b, c) { alert(a, b, c) }

Когда вы вызываете callback функцию, это тоже самое, что вызвать fn с параметрами вот так
fn(1,2,3)

Ваш случай
function fn (a, b, c) { alert(a, b, c) }

function foo (callback) { 
   var a = 1, b = 2, c = 3
   callback(1, 2, 3) // равносильно fn (1, 2, 3)
}

foo(fn)

Необязательно передавать анонимную функцию, любую функцию.

Резюме: Вам с функциям бы сначала разобраться.
Почитайте вот это, например: https://learn.javascript.ru/function-basics
Ответ написан
Комментировать
Ivanq
@Ivanq
Знаю php, js, html, css
Гм... Функцию можно записать в переменную, во все что угодно. Представьте себе пример:
function a(name) {
    alert(name);
}
a("Vanya");

Вот и смотрите - строка еще не создалась, но она в функции уже используется! То же самое с callback:
function a(name, callback) {
    alert(name);
    callback(name);
}
a("Vanya", function(name) { console.log(name); });

Вот смотрите - здесь почти тоже самое. Возможно, вас смущает вызов функции callback? Тогда вот ответ - все в js представляется переменными и свойствами, даже функции. Таким образом вызывается функция, находящаяся в переменной callback! А callback - переменная, которая содержит анонимную функцию.

Также, как уже заметил Yaroslav Lyzlov, можно передавать не только анонимную функцию.
Ответ написан
Комментировать
@mvr1976 Автор вопроса
Учу html, css, js
Вот, творчески переосмыслил, вроде все понятно и все работает:
function fuck(girl, boy, callback){
	var hookUp;
	if(girl >=18 && boy >=18){
		hookUp = true;
	}else hookUp = false;	
	callback(hookUp);
}
fuck(19,30, function(hookUp){
	if(hookUp){
		console.log("You're welcome!");	
	}else console.log("No way!!!");
});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы