Ответы пользователя по тегу Замыкания
  • Почему без return function код не работает?

    @Faliah
    В данном случае вы получаете своего рода фабрику счётчиков. При каждом вызове makeCounter() возвращается ссылка на объект фунции, а не на её результат. Так же в данном примере используется замыкание, которое дает возвращаемой функции возможность обращаться к переменной currentCount, которая нахоится в родительской области видимости.
    function makeCounter() {
    
      var currentCount = 1;
    
      return function() {
        return currentCount++;
      };
    }
    
    var counter = makeCounter();
    var counter1 = makeCounter();
    
    console.log(counter()); //1
    console.log(counter()); //2
    // счётчики работают независимо друг от друга
    console.log(counter1()) //1


    Этот пример, конечно больше синтетический, зато охватывает несколько чрезвычайно важных концепций в JS, а именно: замыкания, области видимости, first-class function. First-class function, в свою очередь, означает ряд принципов, которым следуют абсолютно все функции, создаваемые в JS:
    • Каждая функция является объектом или экзмепляром объектоного типа (instance of Object type)
    • У функции могут быть свойства. К примеру запись makeCounter.foo = "bar", абсолютно валидна. Подобный подход используется для создания статических свойств функции
    • Ссылку на объект функции можно сохранить в переменной, а потом вызвать эту функцию. Как в вашем примереcounter()
    • Можно передавать функцию в качестве параметра в другую функцию
    • Функцию можно возвращать из другой функции, как в вашем примере


    Таким образом, хотя данная функция не несёт в себе сложной логики, но она иллюстрирует множество важнейших концепций, без знания которых будет очень тяжело понимать как работают многие бибилиотеки
    Ответ написан
    Комментировать