Нет, у тебя в примере в переменную
d записывается
2 и все.
Там нет замыкания.
И понимаешь ты все не верно.
Твой пример похож на задачу по замыканиям, которую надо решить.
Вот если переписать так:
function a() {
var c = 2;
function b() {
return c++;
};
return b;
}
var d = a();
alert(d()); // 2
alert(d()); // 3
то
d будет присвоенна функция:
function b() {
return c++;
};
а значение
с будет браться из скоупа в котором функция была создана и перезаписывается с каждым вызовом
d.
Скоуп будет существовать пока есть ссылка на функцию, то есть пока мы не присвоим
d другое значение.
Это и есть замыкание.
Значение
c было определенно в функции
a в момент вызова. Следом мы возвращаем из функции
a функцию
b. Функция
b использует переменную
c из скоупа созданного в момент вызова функции
a и, как я писал выше, пока будет существовать ссылка на функцию
b скоуп будет существовать, потому что функция
b использует
a и может быть вызвана.
А с каждым вызовом
a мы создаем новый скоуп, и если возвращать каждый результат вызова
a в переменную, каждый раз мы будем получать новое замыкание:
function a() {
var c = 2;
function b() {
return c++;
};
return b;
}
var d = a();
var e = a();
alert(d()); // 2
alert(d()); // 3
alert(e()); // 2
alert(d()); // 4
alert(d()); // 5
alert(e()); // 3
Надеюсь так понятней.