Skip to content

Commit 6d8df49

Browse files
committed
translated until line 310
1 parent 45b35f8 commit 6d8df49

File tree

1 file changed

+21
-21
lines changed

1 file changed

+21
-21
lines changed

1-js/06-advanced-functions/03-closure/article.md

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -98,9 +98,9 @@ alert(i); // Eroare, nu există o astfel de variabilă
9898

9999
Vizual, `let i` se află în afara lui `{...}`. Dar construcția `for` este specială aici: variabila, declarată în interiorul ei, este considerată parte a blocului.
100100

101-
## Funcții nested
101+
## Funcții imbricate
102102

103-
O funcție este numită "nested" atunci când este creată în interiorul altei funcții.
103+
O funcție este numită "imbricată" atunci când este creată în interiorul altei funcții.
104104

105105
Acest lucru este posibil cu ușurință în JavaScript.
106106

@@ -109,7 +109,7 @@ Acest lucru este posibil cu ușurință în JavaScript.
109109
```js
110110
function sayHiBye(firstName, lastName) {
111111

112-
// funcție helper nested de utilizat mai jos
112+
// funcție helper imbricată pentru utilizat mai jos
113113
function getFullName() {
114114
return firstName + " " + lastName;
115115
}
@@ -120,9 +120,9 @@ function sayHiBye(firstName, lastName) {
120120
}
121121
```
122122

123-
Aici funcția *nested* `getFullName()` este făcută pentru conveniență. Aceasta poate accesa variabilele exterioare și astfel poate returna numele complet. Funcțiile nested sunt destul de frecvente în JavaScript.
123+
Aici funcția *imbricată* `getFullName()` este făcută pentru conveniență. Aceasta poate accesa variabilele exterioare și astfel poate returna numele complet. Funcțiile imbricate sunt destul de frecvente în JavaScript.
124124

125-
Ceea ce este mult mai interesant, o funcție nested poate fi returnată: fie ca o proprietate a unui nou obiect ori ca un rezultat de sine stătător. Acesta poate fi apoi utilizat în altă parte. Indiferent unde, aceasta are în continuare acces la aceleași variabile exterioare.
125+
Ceea ce este mult mai interesant, o funcție imbricată poate fi returnată: fie ca o proprietate a unui nou obiect ori ca un rezultat de sine stătător. Acesta poate fi apoi utilizat în altă parte. Indiferent unde, aceasta are în continuare acces la aceleași variabile exterioare.
126126

127127
Mai jos, `makeCounter` creează funcția "counter" care returnează următorul număr la fiecare invocare:
128128

@@ -256,9 +256,9 @@ Dacă o variabilă nu este găsită nicăieri, este o eroare în modul strict (f
256256
![lexical environment lookup](lexical-environment-simple-lookup.svg)
257257

258258

259-
### Step 4. Returning a function
259+
### Pasul 4. Returnarea unei funcții
260260

261-
Let's return to the `makeCounter` example.
261+
Să ne întoarcem la exemplul `makeCounter`.
262262

263263
```js
264264
function makeCounter() {
@@ -272,42 +272,42 @@ function makeCounter() {
272272
let counter = makeCounter();
273273
```
274274

275-
At the beginning of each `makeCounter()` call, a new Lexical Environment object is created, to store variables for this `makeCounter` run.
275+
La începutul fiecărui apel `makeCounter()`, se creează un nou obiect Lexical Environment, pentru a stoca variabilele pentru această execuție `makeCounter`.
276276

277-
So we have two nested Lexical Environments, just like in the example above:
277+
Astfel avem două Medii Lexicale imbricate, la fel ca în exemplul de mai sus:
278278

279279
![](closure-makecounter.svg)
280280

281-
What's different is that, during the execution of `makeCounter()`, a tiny nested function is created of only one line: `return count++`. We don't run it yet, only create.
281+
Ceea ce este diferit este că, în timpul execuției `makeCounter()`, este creată o mică funcție imbricată de o singură linie: `return count++`. Nu o executăm încă, ci doar o creăm.
282282

283-
All functions remember the Lexical Environment in which they were made. Technically, there's no magic here: all functions have the hidden property named `[[Environment]]`, that keeps the reference to the Lexical Environment where the function was created:
283+
Toate funcțiile își amintesc Mediul Lexical în care au fost create. Tehnic, nu există nici o magie aici: toate funcțiile au o proprietate ascunsă numită `[[Environment]]`, care păstrează referința spre Mediul Lexical în care a fost creată funcția:
284284

285285
![](closure-makecounter-environment.svg)
286286

287-
So, `counter.[[Environment]]` has the reference to `{count: 0}` Lexical Environment. That's how the function remembers where it was created, no matter where it's called. The `[[Environment]]` reference is set once and forever at function creation time.
287+
Astfel, `counter.[[Environment]]` are referință spre Mediul Lexical `{count: 0}`. Așa este cum funcția își amintește unde a fost creată, indiferent unde este apelată. Referința `[[Environment]]` este setată o singură dată și pentru totdeauna la momentul creării funcției.
288288

289-
Later, when `counter()` is called, a new Lexical Environment is created for the call, and its outer Lexical Environment reference is taken from `counter.[[Environment]]`:
289+
Ulterior, când `counter()` este apelat, un nou Mediu Lexical este creat pentru apel, iar referința exterioară a Mediului său Lexical este preluată din `counter.[[Environment]]`:
290290

291291
![](closure-makecounter-nested-call.svg)
292292

293-
Now when the code inside `counter()` looks for `count` variable, it first searches its own Lexical Environment (empty, as there are no local variables there), then the Lexical Environment of the outer `makeCounter()` call, where it finds and changes it.
293+
Acum, atunci când codul din interiorul lui `counter()` caută variabila `count`, caută mai întâi în propriul său Mediu Lexical (gol, deoarece nu există variabile locale acolo), apoi în Mediul Lexical al apelului exterior `makeCounter()`, unde o găsește și o modifică.
294294

295-
**A variable is updated in the Lexical Environment where it lives.**
295+
**O variabilă este actualizată în Mediul Lexical în care trăiește.**
296296

297-
Here's the state after the execution:
297+
Iată care este starea după execuție:
298298

299299
![](closure-makecounter-nested-call-2.svg)
300300

301-
If we call `counter()` multiple times, the `count` variable will be increased to `2`, `3` and so on, at the same place.
301+
Dacă apelăm `counter()` de mai multe ori, variabila `count` va fi mărită la `2`, `3` și așa mai departe, în același loc.
302302

303303
```smart header="Closure"
304-
There is a general programming term "closure", that developers generally should know.
304+
Există un termen general de programare "closure", pe care dezvoltatorii ar trebui în general să-l cunoască.
305305
306-
A [closure](https://en.wikipedia.org/wiki/Closure_(computer_programming)) is a function that remembers its outer variables and can access them. In some languages, that's not possible, or a function should be written in a special way to make it happen. But as explained above, in JavaScript, all functions are naturally closures (there is only one exception, to be covered in <info:new-function>).
306+
Un [closure](https://en.wikipedia.org/wiki/Closure_(computer_programming)) este o funcție care își amintește variabilele exterioare și le poate accesa. În unele limbaje, acest lucru nu este posibil, sau o funcție trebuie scrisă într-un mod special pentru a face acest lucru să se întâmple. Dar așa cum s-a explicat mai sus, în JavaScript, toate funcțiile sunt în mod natural closures (există o singură excepție, care va fi abordată în <info:new-function>).
307307
308-
That is: they automatically remember where they were created using a hidden `[[Environment]]` property, and then their code can access outer variables.
308+
Adică: ele își amintesc automat unde au fost create cu ajutorul unei proprietăți ascunse `[[Environment]]`, iar apoi codul lor poate accesa variabilele exterioare.
309309
310-
When on an interview, a frontend developer gets a question about "what's a closure?", a valid answer would be a definition of the closure and an explanation that all functions in JavaScript are closures, and maybe a few more words about technical details: the `[[Environment]]` property and how Lexical Environments work.
310+
Atunci când, la un interviu, un dezvoltator frontend primește o întrebare despre "ce este un closure?", un răspuns valid ar fi o definiție a closure-ului și o explicație că toate funcțiile din JavaScript sunt closure-uri, și poate câteva cuvinte în plus despre detalii tehnice: proprietatea `[[Environment]]` și cum funcționează Mediile Lexicale.
311311
```
312312

313313
## Garbage collection

0 commit comments

Comments
 (0)