@alexnotonfire

Почему return функции без скобок — выполняет ее, а не возвращает объект функции?

Есть код. Функция вложена в другую функцию.

function makeCounter() {
  function counter() {
    alert('test');
  };

  return counter;
}

var counter = makeCounter();
counter();


Почему в этом примере вызвется alert, хотя по идее если мы возвращаем функцию без круглых скобок, то должен вернутся объект функции? Может кто-то теоретически пояснить?
  • Вопрос задан
  • 488 просмотров
Решения вопроса 1
VoidVolker
@VoidVolker Куратор тега JavaScript
Dark side eye. А у нас печеньки! А у вас?
Потому что () означает "выполнить функцию". Это может быть как именнованная функция, так и переменная содержащая функцию.
function foo1(){ console.log('foo1'); }
var foo2 = function (){ console.log('foo2'); }
foo1();
foo2();

Результат будет одинаковый. В вашем случае в переменной counter находится функция - поэтому она и выполняется при попытке её вызвать как функцию.
var counter = makeCounter();
Разворачиваем:
var counter = (function makeCounter() {
  function counter() {
    alert('test');
  };
  return counter;
})();

Далее:
var counter = (function makeCounter() {
  return function counter() {
    alert('test');
  };
})();

var counter = function() { alert('test'); };
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Tsimur_S
var counter = makeCounter();
вот тут возвращается обьект функции.
counter();
а тут он выполняется
В чем проблема то?
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы