Întoarcere funcția de funcția - modul în care circuitul stivă overflow în limba rusă

Voi încerca să explic pe degete.

Această linie de cod

Acesta este de a face ceva de genul asta

Numai CURRENTCOUNT variabilă nu la nivel mondial, și este în „vina“, care este vizibil numai in interiorul functiei. De fapt, makeCounter () nu mai niciodată nu a efectuat în contorul de apel (). apoi în sine contor variabilă este o funcție care are acces exclusiv la CURRENTCOUNT variabilă.

Întreaga idee de a crea funcția contra () nu este în mod direct, prin atribuirea, și printr-o altă funcție makeCounter () este doar pentru a atașa la ea o variabilă, care se vede doar contra () și care își păstrează valoarea între apeluri. În alte limbaje de programare, există așa-numitele variabile statice - sensul lor doar pentru a păstra valoarea între apelurile la funcția, dar să fie disponibilă numai în cadrul funcției.

Crearea de defect mecanic despre acest lucru. Când funcția este numit pentru toate variabilele sale locale alocate zona de memorie. Când funcția termină activitatea sa, această zonă de memorie este eliminat - acesta este sensul variabilelor locale trăiesc, atâta timp cât funcția este executată. Cu toate acestea, în cazul în care într-o funcție (pe care îl ai makeCounter ()) să declare o altă funcție (care, de asemenea va fi ca o funcție variabilă locală), iar apoi să se întoarcă declarația unei funcții (pe care o ai anonim, dar noi o numim contorul (). Numele variabilei în care va continua) apelantului, zona de memorie cu variabile locale vor fi „viu“, atâta timp cât întoarcerea funcției „trăiește“ într-o variabilă în codul extern. În același timp, această zonă de acces de memorie vor fi returnate doar funcția. Funcția de returnare și zona de memorie asociate numit închiderea. Dacă apelați makeCounter () din nou, apoi reprezintă o nouă zonă de memorie, să declare și să returneze o nouă funcție, un nou circuit este format - astfel încât counter'y independent unul de celălalt, ca „look“ în diferite zone de memorie și pot „vedea“ există diferite variabile CURRENTCOUNT ' s

În ceea ce privește postfiknogo (CURRENTCOUNT ++) și un prefix (++ CURRENTCOUNT) increment, sonda @PeterOslon explicat.

Răspuns 4 '16 februarie, la 05:47