Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.09.2015, 15:28
Аватар для ogurchik
Аспирант
Отправить личное сообщение для ogurchik Посмотреть профиль Найти все сообщения от ogurchik
 
Регистрация: 23.02.2015
Сообщений: 45

Почему так работает, а по-другому нет?
Привет. Тренируюсь, нужно было написать счетчик. Навалялось такое
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());

А вот этот - отлично. Почему так?
Ответить с цитированием
  #2 (permalink)  
Старый 09.09.2015, 15:31
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

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

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

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

Последний раз редактировалось tsigel, 10.09.2015 в 18:13.
Ответить с цитированием
  #3 (permalink)  
Старый 10.09.2015, 18:08
Аватар для ogurchik
Аспирант
Отправить личное сообщение для ogurchik Посмотреть профиль Найти все сообщения от ogurchik
 
Регистрация: 23.02.2015
Сообщений: 45

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


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
2 Одинаковых скрипта 1 работает второй нет novitocnaforume Общие вопросы Javascript 5 02.07.2015 21:03
Два варианта паттерна для регулярки. Один работает, другой нет izcian Общие вопросы Javascript 3 25.04.2015 19:45
Объясните, почему так происходит ak-o jQuery 12 12.07.2013 12:32
Почему это работает? (инклуд JS в JS) Василий Б. Общие вопросы Javascript 4 11.06.2010 12:41