Почему функция вызывается без скобок?

function makeCounter() {
  var currentCount = 1;

  function counter() {
      return currentCount++;
    }

  counter.set = function(value) {
    currentCount = value;
  };

  counter.reset = function() {
    currentCount = 1;
  };

  return counter; // Интересует этот момент
}

var counter = makeCounter();

alert( counter() ); // 1
alert( counter() ); // 2

counter.set(5);
alert( counter() ); // 5


Раньше считал, что если функция вызывается без скобок, то это ради того, чтобы показать код функции, но в этом случае это не так
  • Вопрос задан
  • 3553 просмотра
Пригласить эксперта
Ответы на вопрос 3
petermzg
@petermzg
Самый лучший программист
"return counter;" это не вызов функции, это возращается отбьект/функция "function counter".
А вот далее "counter()" это и есть вызов этой функции "function counter()"
Ответ написан
kamikadze1996
@kamikadze1996
{[]}
Скажу так. Counter без скобок это ССЫЛКА на функцию\объект а counter() то есть соответственно со скобками это уже сам вызов. Вы из функции возвращаете ссылку на функцию counter а не ее вызов, это для того что бы ее можно было вызвать далее в коде. И так как функция=объект у нее есть и методы которые вы присвоили, тут тоже правило, вам нужно только counter без скобок что бы можно было вызвать МЕТОДЫ объекта.
А за областью функции уже идут скобки. Хотим повысить переменную currentCounter =+ 1 то вызываем функцию count(). Хотим ресет или метод данной функции то вызываем counter.reset(). А иначе был бы результат counter().reset()
Ответ написан
Комментировать
Rudmz
@Rudmz
ATM, SST.
Так alert( counter() ); и выводит результат выполнения функции.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы