Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Почему так работает, а по-другому нет? (https://javascript.ru/forum/misc/58208-pochemu-tak-rabotaet-po-drugomu-net.html)

ogurchik 09.09.2015 15:28

Почему так работает, а по-другому нет?
 
Привет. Тренируюсь, нужно было написать счетчик. Навалялось такое
var catCounter = function () {
    var counter = 0;
    return function () {
        return counter++;
    }
};
alert(catCounter());

Такой вариант не сработал.
function catCounter() {
    var counter = 0;

    return function() {
        return counter++;
    };
}
var counter = catCounter();
alert(counter());

А вот этот - отлично. Почему так?

tsigel 09.09.2015 15:31

ogurchik,
потому что catCounter возвращает функцию, которая генерирует число а не число.

var catCounter = function () {
    var counter = 0;
    return function () {
        return counter++;
    }
};
alert(catCounter()());

В первом варианте вы получили функцию и пытаетесь её показать алертом.
Во втором вы получили функцию, потом у неё получили число, которое показываете алертом.

ogurchik 10.09.2015 18:08

tsigel,
все, понятно, спасибо! совершенно вылетела из головы это особенность


Часовой пояс GMT +3, время: 17:20.