Как работают замыкания в callback-функциях?
Ключевые слова: определенные внутри содержащей функции.
Вы замыкание создаёте в момент вызова функции a(), а внутри неё уже используете callback. В данном случае никакой содержащей функции нет, есть только глобальный контекст выполнения. Поэтому, в замыкание попало не то, что внутри функции a(), а то что, снаружи - window:var d = 0;

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

a(1, function() { // Замыкание создаётся здесь
  console.log(a);
  console.log(d);
})
В 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/