Замыкания в JavaScript

V5
На сайте с 12.03.2009
Offline
39
585

Привет, всем. Подскажите новичку? Есть вот такой JS-код:


<script>

function N() {
var cnt=0;

this.getCnt = function() {
return cnt;
}

this.incCnt = function() {
cnt++;
}
}

var c = new N();
c.incCnt();
c.incCnt();

var d = new N();
d.incCnt();
d.incCnt();
d.incCnt();

</script>

Знакомлюсь с замыканиями и вот что в толк не возьму. Есть 2 функции getCnt и incCnt, в замыкании каждого из них есть переменная cnt. C учетом того, что это 2 разные функции и 2 разных замыкания, почему изменение cnt в функции incCnt влияет на переменную cnt из замыкания функции getCnt?

Спасибо.

siv1987
На сайте с 02.04.2009
Offline
427
#1
C
На сайте с 04.02.2005
Offline
277
#2

Слова умные, а вопроса нет.

Есть объект (по вашему замыкание)

Есть свойство объекта cnt

есть методы объекта get и incnt

Оба метода имеет доступ к свойству cnt (см ссылку про видимость переменных)

Было бы чудом если бы вы спросили

var c = new N();

var d = new N();

c.incCnt();
c.incCnt();

d.getCnt();
c,getCnt();

А в результате получили бы два одинаковых значения

V5
На сайте с 12.03.2009
Offline
39
#3

А в какой момент переменная cnt стала свойством объекта?

Как incCnt и getCnt стали методами - я вижу. А вот когда переменная стала свойством - не вижу.

Наверное чего-то не понимаю, поэтому и ясности не наступает.

C
На сайте с 04.02.2005
Offline
277
#4

ну как же?

А это что?

function N() {

var cnt=0;
siv1987
На сайте с 02.04.2009
Offline
427
#5

Это одна переменная в текущей области видимости function N. Почитайте основы js - область видимости.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий