Каква е схемата в JavaScript

Това е доста проста тема, но тя изисква разбиране. Първо, нека да погледнем какво се случва в самата функция.
Какво става тук и какво LexicalEnvironment. Нека си го кажем.
Сега стигаме до следния пример. Кажи ми, какво ще бъде показана в този случай?
Мислиш ли, че? Мисля, че по-голямата част отговори, че се показва цифрата 3, и това е правилния отговор, но може ли да ни кажете как интерпретатора научих за променливата б. В края на краищата, не е в тялото на функцията. Ако не, нека да се справят.
ВАЖНО! Имайте предвид, че на имот [[Обхват]] се намира на мястото, където функцията е обявен и не са причинени от, което е и причината кода по-долу показва броя 3, а не 5, както някои може би си мислите.
бар б = 2;
функция Х (а) сигнал (А + В);
>
Всичко беше само прелюдия за да разберете как работи всичко, и да я направи по-лесно да се разбере как работи веригата. А сега преминете направо към темата на статията.
Както вече казах, LexicalEnvironment обект е унищожен след всяко изпълнение на функцията и създадена отново с изтеглянето. Въпреки това, ако искаме да запазите данните? Т.е. ние искаме всичко, което е написано в LexicalEnvironment сега запазена и е била използвана за следващото обаждане? Тя е за това и има схеми.
Var функция = поздрав (# '# Nicholas ");
поздрав = нула;
функция ();
Така че, нека да се даде определение за това какво такава схема.
Circuit - функция, заедно с всички променливи, които са достъпни за нея.
функция makeCounter () Var CURRENTCOUNT = 0;
връщане функция () CURRENTCOUNT ++;
върнете CURRENTCOUNT;
>;
>
Var брояч = makeCounter ();
брояч ();
брояч ();
сигнал (брояч ()); // 3