Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Замыкание - не понятен return. (https://javascript.ru/forum/misc/73372-zamykanie-ne-ponyaten-return.html)

Auroar 10.04.2018 21:21

Замыкание - не понятен return.
 
При использовании "замыкания" в js в консоль ничего не выводится. Вроде как return завершает выполнение функции, тогда как реализовать замыкание???
<!DOCTYPE html>
<html>
<head>
    <title>Мой сайт</title>
    <meta charset="UTF-8">
    <script src="jsa.js"></script>
</head>
<body>
    
</body>
</html>

function get() {
    var a = 0;
    return function abcv() {
        a++;
    }
    console.log(a);
}

 get();

Везде искал, не могу понять в чем проблема, надеюсь на помощь, заранее спасибо!)

рони 10.04.2018 21:40

Auroar,
Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]


О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.

рони 10.04.2018 21:49

Auroar,
function get() {
 var a = 0;
 return function abcv() {
 a++;
 console.log(a);
 }

 }

 var b = get();
 b();
 b();

Auroar 10.04.2018 22:02

Принцип замыканий
 
Спасибо большое) но непонятно почему мы не можем написать console.log(); в function get(){}, ничего не выведется, но почему, почему нужно именно в function abcv(){}? И для чего в конце присваивать функцию переменной?

рони 10.04.2018 22:16

.
Цитата:

Сообщение от Auroar
почему мы не можем написать console.log(); в function get(){}

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

Цитата:

Сообщение от Auroar
И для чего в конце присваивать функцию переменной?

чтобы получить function abcv

Auroar 11.04.2018 00:14

Почти все понял
 
Первое понял, спасибо), последнее не пойму:
После функции abcv в функции get "a" становится равна 1? Если да - то после повторного вызова функции в начале ее указана что a = 0, то-есть она обнуляться должна, почему этого не происходит?
function get() {
 var a = 0;
 return function abcv() { //Возвращаем 1
 a++;
 console.log(a);
 }
 // a = 1 (по идеи)
 }
 // Теперь a в get() равна 1 (По идеи)
/* ГЛАВНОЕ: Получается когда мы делаем присвоение get() к b мы присваиваем функцию где a = 1, но в начале get() у нас все ровно a присваевается(=) к 0, вот и не пойму. Если при выполнении функции a сразу становится 0. Как оно тогда работает?
 */
var b = get();
 b();
 b();

рони 11.04.2018 00:47

Цитата:

Сообщение от Auroar
то-есть она обнуляться должна, почему этого не происходит?

функция abcv только использует переменную a, но не создаёт.


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