@serking77

Как работают замыкания в callback-функциях?

Всем привет!

В интернете нашел такое про callback.
" Кроме того, по сути функция обратного вызова является замыканием. Замыкания
имеют доступ к области видимости содержащей функции, а значит могут
использовать любые переменные, определенные внутри содержащей
функции."

Пытаюсь реализовать не работает.
Почему d не определена, она же объявлена внутри содержащей коллбек функции.
function a (s, callback) {
	var d = 5;
	callback();
};

a (1, function() {
	console.log(d); // d не определена
})
  • Вопрос задан
  • 1859 просмотров
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Ключевые слова: определенные внутри содержащей функции.
Вы замыкание создаёте в момент вызова функции a(), а внутри неё уже используете callback. В данном случае никакой содержащей функции нет, есть только глобальный контекст выполнения. Поэтому, в замыкание попало не то, что внутри функции a(), а то что, снаружи - window:
var d = 0;

function a(s, callback) {
  d = 42;
  callback(); // здесь никакого замыкания нет, есть только вызов функции
};

a(1, function() { // Замыкание создаётся здесь
  console.log(a);
  console.log(d);
})
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
В javascript синтаксическая область видимости, переменная d определена внутри функции a и снаружи не видна.
https://learn.javascript.ru/functions-closures
Само понятие синтаксической области видимости хорошо описано
www.books.ru/books/javascript-podrobnoe-rukovodstv...
Вот пример замыкания https://jsfiddle.net/vb1app7o/

сраните результат выполнения первой и второй
https://jsfiddle.net/4vqd0huL/1/
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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