Върнете функция от функция - как преливане на веригата комин на Руски

Ще се опитам да обясня на пръстите на ръцете.

Тази линия на код

Тя се прави нещо подобно

Само променлива CURRENTCOUNT не глобален, и е в графата "грешка", която се вижда само в самата функция. Всъщност makeCounter () вече не никога не е извършено в брояча на повикване (). тогава брояч променлива себе си е функция, която има изключителен достъп до променлива CURRENTCOUNT.

Цялата идея за създаване на функция брояч () не е пряко чрез възлагане, а чрез друга функция makeCounter () е просто да се прикрепят към него променлива, която вижда само брояч () и която запазва своята стойност между повиквания. С други езици за програмиране, има така наречените статични променливи - тяхното значение само за да поддържат стойността между повиквания към функция, но и да бъде на разположение само в рамките на функцията.

Създаване на механична повреда за това. При активиране на функцията се нарича за всички свои локални променливи, разпределени площ памет. При активиране на функцията завършва своята работа, тази област на паметта се изчиства - това е смисъла на локални променливи живеят толкова дълго, колкото на функцията се изпълнява. Въпреки това, ако в рамките на една функция (което трябва да го makeCounter ()) да обяви друга функция (която също ще бъде като локална променлива функция), и след това се върнете на декларацията на функция (ли го анонимно, но ние го наричаме тезгяха (). Името на променливата, в която тя ще продължи) на обаждащия се, зоната на паметта с местните променливи ще бъде "на живо" толкова дълго, колкото връщането на функцията "живее" в променлива във външната код. В същото време тази област на достъп до паметта ще са само върна функция. функция за връщане и свързаните с площ памет нарича закриването. Ако се обадите makeCounter () отново, след което се изправи нова област на паметта, да декларира и да се върне на нова функция, нова верига се образува - така counter'y независими едно от друго, като "външен вид" в различни области на паметта, както и "виждат" има различни променливи CURRENTCOUNT " ите

Що се отнася postfiknogo (CURRENTCOUNT ++) и префикс (++ CURRENTCOUNT) нарастване, обясни @PeterOslon кладенеца.

Отговорено 04 Февруари '16 в 05:47