Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Что значит ета скобка у функции?? (https://javascript.ru/forum/dom-window/78371-chto-znachit-eta-skobka-u-funkcii.html)

AnotherPerson 03.09.2019 09:17

Что значит ета скобка у функции??
 
Смотрю видео урок про замыкания.. Вот увидел такую фичу

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

console.log(counter());

console.log(counter());


Меня интересуют последнии круглые скобки... Что они значат?? Я когда их убераю, и пишу console.log(counter()());
То подсчет не идет.
Объясните пожалуйста логику js. Почему тааак?

ksa 03.09.2019 09:29

Цитата:

Сообщение от AnotherPerson
counter()

Это вызов функции... Ее имя/идентификатор counter.
Это делается не только в JS... Это делается во многих ЯП.

ksa 03.09.2019 09:32

Одни скобки явно лишние...
Будет работать и так
var counter = function() {
    var count = 0;
    return function() {
        return count++;
    }
}();
alert(counter());
alert(counter());

ksa 03.09.2019 09:34

AnotherPerson, может ты пример не правильно переписал?
Возможно в оригинале было так
var counter = (function() {
    var count = 0;
    return function() {
        return count++;
    }
})();
alert(counter());
alert(counter());

j0hnik 03.09.2019 09:36

ksa, он наверное вот так пробует

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

console.log(counter()());

console.log(counter()());


функция внутри каждый раз выполняется, счетчик не идет

ksa 03.09.2019 09:46

Цитата:

Сообщение от j0hnik
он наверное вот так пробует

Эва... :-?
Тогда
Цитата:

Сообщение от AnotherPerson
Что они значат?

Делается некий аналог вот такого
var count = 0;
var counter = function() {
	return count++;
}
alert(counter());
alert(counter());

Но так будет глобальная переменная count...
Во избежании этого выполняется безымянная функция, внутри которой создается еще одна функция... Которая "видит" переменную count. И так получается, что "видит" count только она... ;)


Часовой пояс GMT +3, время: 17:35.