В первом примере используется выражение функции Immediately Inovked .Это вызов встроенной функции и назначение результирующей функции для счетчика.Каждый раз, когда вы вызываете counter (), вы вызываете ту внутреннюю функцию, которая имеет переменную count в области видимости.
Второй пример эквивалентен записи в виде
function counter() {
var count=0;
return function(){
return count++;
}
}
Когда вы пишете это таким образом, становится понятнее, что каждый раз, когда вы вызываете counter (), вы возвращаете new *Функция 1009 * с переменной count
в области действия
Вы можете сделать эквивалент во втором примере, присваивая результат переменной и вызывая ее несколько раз.
var counter = function(){
var count=0;
return function(){
return count++;
}
};
var counterObj = counter();
counterObj(); // returns 0
counterObj(); // returns 1
counterObj(); // returns 2