You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: ro-RO/README.ro.md
+322Lines changed: 322 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -47,3 +47,325 @@ Nu ezita să mă contactezi! 😊 <br />
47
47
</details>
48
48
49
49
---
50
+
51
+
###### 1. Care este rezultatul?
52
+
53
+
```javascript
54
+
functionsayHi() {
55
+
console.log(name);
56
+
console.log(age);
57
+
var name ="Lydia";
58
+
let age =21;
59
+
}
60
+
61
+
sayHi();
62
+
```
63
+
64
+
- A: `Lydia` și `undefined`
65
+
- B: `Lydia` și `ReferenceError`
66
+
- C: `ReferenceError` și `21`
67
+
- D: `undefined` și `ReferenceError`
68
+
69
+
<details><summary><b>Răspuns</b></summary>
70
+
<p>
71
+
72
+
#### Răspuns: D
73
+
74
+
În interiorul funcției, mai întâi declarăm variabila `name` cu cuvântul cheie `var`. Acest lucru înseamnă că variabila este hoisted (spațiul de memorie este configurat în faza de creare) cu valoarea implicită `undefined`, până când ajungem efectiv la linia în care definim variabila. Nu am definit încă variabila pe linia în care încercăm să înregistrăm variabila `name`, așa că aceasta păstrează încă valoarea `undefined`.
75
+
76
+
Variabilele create cu cuvântul cheie `let` (și `const`) sunt hoisted, dar, spre deosebire de `var`, nu sunt <i>inițializate</i>. Acestea nu sunt accesibile înainte de linia în care le declarăm (initializăm). Aceasta se numește zona moartă temporală (temporal dead zone). Atunci când încercăm să accesăm variabilele înainte de a fi declarate, JavaScript aruncă o excepție de tip `ReferenceError`.
77
+
78
+
</p>
79
+
</details>
80
+
81
+
---
82
+
83
+
###### 2. Care este rezultatul?
84
+
85
+
```javascript
86
+
for (var i =0; i <3; i++) {
87
+
setTimeout(() =>console.log(i), 1);
88
+
}
89
+
90
+
for (let i =0; i <3; i++) {
91
+
setTimeout(() =>console.log(i), 1);
92
+
}
93
+
```
94
+
95
+
- A: `0 1 2` și `0 1 2`
96
+
- B: `0 1 2` și `3 3 3`
97
+
- C: `3 3 3` și `0 1 2`
98
+
99
+
<details><summary><b>Răspuns</b></summary>
100
+
<p>
101
+
102
+
#### Răspuns: C
103
+
104
+
Datorită cozii de evenimente din JavaScript, funcția de callback `setTimeout` este apelată _după_ ce bucla a fost executată. Deoarece variabila `i` din prima buclă a fost declarată folosind cuvântul cheie `var`, această valoare a fost globală. În timpul buclei, am incrementat valoarea lui `i` cu `1` de fiecare dată, folosind operatorul unary `++`. Până când funcția de callback `setTimeout` a fost invocată, `i` era egal cu `3` în primul exemplu.
105
+
106
+
În cea de-a doua buclă, variabila `i` a fost declarată folosind cuvântul cheie `let`: variabilele declarate cu cuvântul cheie `let` (și `const`) sunt cu scop la nivel de bloc (un bloc este orice între `{ }`). În fiecare iterație, `i` va avea o valoare nouă, iar fiecare valoare este în cadrul buclei.
107
+
108
+
</p>
109
+
</details>
110
+
111
+
---
112
+
113
+
###### 3. Care este rezultatul?
114
+
115
+
```javascript
116
+
constshape= {
117
+
radius:10,
118
+
diameter() {
119
+
returnthis.radius*2;
120
+
},
121
+
perimeter: () =>2*Math.PI*this.radius,
122
+
};
123
+
124
+
console.log(shape.diameter());
125
+
console.log(shape.perimeter());
126
+
```
127
+
128
+
- A: `20` și `62.83185307179586`
129
+
- B: `20` și `NaN`
130
+
- C: `20` și `63`
131
+
- D: `NaN` și `63`
132
+
133
+
<details><summary><b>Răspuns</b></summary>
134
+
<p>
135
+
136
+
#### Răspuns: B
137
+
138
+
Rețineți că valoarea lui `diameter` este o funcție obișnuită, în timp ce valoarea lui `perimeter` este o funcție arrow.
139
+
140
+
Cu funcțiile arrow, cuvântul cheie `this` se referă la contextul său curent de încadrare, spre deosebire de funcțiile obișnuite! Acest lucru înseamnă că atunci când apelăm `perimeter`, acesta nu se referă la obiectul formei, ci la încadrarea sa curentă (de exemplu, fereastra).
141
+
142
+
Nu există nicio valoare `radius` pe acel obiect, ceea ce returnează `NaN`.
143
+
144
+
</p>
145
+
</details>
146
+
147
+
---
148
+
149
+
###### 4. Care este rezultatul?
150
+
151
+
```javascript
152
+
+true;
153
+
!"Lydia";
154
+
```
155
+
156
+
- A: `1` și `false`
157
+
- B: `false` și `NaN`
158
+
- C: `false` și `false`
159
+
160
+
<details><summary><b>Răspuns</b></summary>
161
+
<p>
162
+
163
+
#### Răspuns: A
164
+
165
+
Operatorul unary plus încearcă să convertească un operand într-un număr. `true` este `1`, și `false` este `0`.
166
+
167
+
Șirul de caractere `'Lydia'` este o valoare adevărată. Ceea ce întrebăm de fapt, este "este această valoare adevărată falsă?". Acest lucru returnează `false`.
168
+
169
+
</p>
170
+
</details>
171
+
172
+
---
173
+
174
+
###### 5. Care este rezultatul?
175
+
176
+
```javascript
177
+
constbird= {
178
+
size:"small",
179
+
};
180
+
181
+
constmouse= {
182
+
name:"Mickey",
183
+
small:true,
184
+
};
185
+
```
186
+
187
+
- A: `mouse.bird.size` nu este valid
188
+
- B: `mouse[bird.size]` nu este valid
189
+
- C: `mouse[bird["size"]]` nu este valid
190
+
- D: Toate sunt valide
191
+
192
+
<details><summary><b>Răspuns</b></summary>
193
+
<p>
194
+
195
+
#### Răspuns: A
196
+
197
+
În JavaScript, toate cheile obiectelor sunt șiruri de caractere (cu excepția simbolurilor). Chiar dacă nu le _tipizăm_ ca șiruri de caractere, ele sunt întotdeauna convertite în șiruri de caractere în fundal.
198
+
199
+
avaScript interpretează (sau dezambalează) instrucțiunile. Atunci când folosim notația cu paranteze pătrate, vede prima paranteză pătrată de deschidere `[` și continuă până când găsește paranteza pătrată de închidere `]`. Doar atunci va evalua instrucțiunea.
200
+
201
+
`mouse[bird.size]`: Întâi evaluează `bird.size`, care este `"small"`. `mouse["small"]` returnează `true`
202
+
203
+
Cu toate acestea, cu notația cu punct, acest lucru nu se întâmplă. `mouse` nu are o cheie numită `bird`, ceea ce înseamnă că `mouse.bird` este `undefined`. Apoi, cerem `size` folosind notația cu punct: `mouse.bird.size`. Deoarece `mouse.bird` este `undefined`, de fapt cerem `undefined.size`. Acest lucru nu este valid și va arunca o eroare similară cu `Cannot read property "size" of undefined` (Nu se poate citi proprietatea "size" a unei valori nedefinite).
204
+
205
+
</p>
206
+
</details>
207
+
208
+
---
209
+
210
+
###### 6. Care este rezultatul?
211
+
212
+
```javascript
213
+
let c = { greeting:"Hey!" };
214
+
let d;
215
+
216
+
d = c;
217
+
c.greeting="Hello";
218
+
console.log(d.greeting);
219
+
```
220
+
221
+
- A: `Hello`
222
+
- B: `Hey!`
223
+
- C: `undefined`
224
+
- D: `ReferenceError`
225
+
- E: `TypeError`
226
+
227
+
<details><summary><b>Răspuns</b></summary>
228
+
<p>
229
+
230
+
#### Răspuns: A
231
+
232
+
În JavaScript, toate obiectele interacționează prin _referință_ atunci când sunt setate ca egale între ele.
233
+
234
+
Mai întâi, variabila `c` deține o valoare care face referire la un obiect. Ulterior, atribuim variabilei `d` aceeași referință pe care o are `c` la obiect.
`new Number()` este un constructor de funcții încorporat. Deși arată ca un număr, nu este într-adevăr un număr: are o mulțime de funcționalități suplimentare și este un obiect.
268
+
269
+
Atunci când folosim operatorul `==` (operatorul de egalitate), acesta verifică doar dacă au aceeași _valuare_. Ambele au valoarea `3`, șa că returnează `true`.
270
+
271
+
Cu toate acestea, atunci când folosim operatorul `===` (operatorul de egalitate strictă), atât valoarea, cât _și_ tipul trebuie să fie la fel. Nu sunt: `new Number()` nu este un număr, este un **object**. Ambele returnează `false.`
272
+
273
+
</p>
274
+
</details>
275
+
276
+
---
277
+
278
+
###### 8. Care este rezultatul?
279
+
280
+
```javascript
281
+
classChameleon {
282
+
staticcolorChange(newColor) {
283
+
this.newColor= newColor;
284
+
returnthis.newColor;
285
+
}
286
+
287
+
constructor({ newColor ="green" } = {}) {
288
+
this.newColor= newColor;
289
+
}
290
+
}
291
+
292
+
constfreddie=newChameleon({ newColor:"purple" });
293
+
console.log(freddie.colorChange("orange"));
294
+
```
295
+
296
+
- A: `orange`
297
+
- B: `purple`
298
+
- C: `green`
299
+
- D: `TypeError`
300
+
301
+
<details><summary><b>Răspuns</b></summary>
302
+
<p>
303
+
304
+
#### Răspuns: D
305
+
306
+
Funcția `colorChange` este statică. Metodele statice sunt concepute să existe doar pe constructorul în care sunt create și nu pot fi transmise către niciun copil sau apelate pe instanțele clasei. Deoarece `freddie` este o instanță a clasei Chameleon, funcția nu poate fi apelată pe aceasta. Se aruncă o eroare de tip `TypeError`.
307
+
308
+
</p>
309
+
</details>
310
+
311
+
---
312
+
313
+
###### 9. Care este rezultatul?
314
+
315
+
```javascript
316
+
let greeting;
317
+
greetign = {}; // Typo!
318
+
console.log(greetign);
319
+
```
320
+
321
+
- A: `{}`
322
+
- B: `ReferenceError: greetign is not defined`
323
+
- C: `undefined`
324
+
325
+
<details><summary><b>Răspuns</b></summary>
326
+
<p>
327
+
328
+
#### Răspuns: A
329
+
330
+
Se afișează obiectul, deoarece tocmai am creat un obiect gol pe obiectul global! Atunci când am greșit și am scris `greeting` în loc de `greetign`, interpretorul JavaScript a văzut efectiv acest lucru ca:
331
+
332
+
1.`global.greetign = {}` în Node.js
333
+
2.`window.greetign = {}`, `frames.greetign = {}` și `self.greetign` în browser-e.
334
+
3.`self.greetign` în web workers.
335
+
4.`globalThis.greetign` în toate mediile.
336
+
337
+
Pentru a evita acest lucru, putem folosi `"use strict"`. Acest lucru se asigură că ai declarat o variabilă înainte de a-i atribui o valoare.
338
+
339
+
</p>
340
+
</details>
341
+
342
+
---
343
+
344
+
###### 10. Ce se întâmplă când facem asta?
345
+
346
+
```javascript
347
+
functionbark() {
348
+
console.log("Woof!");
349
+
}
350
+
351
+
bark.animal="dog";
352
+
```
353
+
354
+
- A: Nimic, este absolut în regulă!
355
+
- B: `SyntaxError`. Nu poți adăuga proprietăți la o funcție în acest fel.
356
+
- C: `"Woof"` este înregistrat.
357
+
- D: `ReferenceError`
358
+
359
+
<details><summary><b>Răspuns</b></summary>
360
+
<p>
361
+
362
+
#### Răspuns: A
363
+
364
+
Acest lucru este posibil în JavaScript, deoarece funcțiile sunt obiecte! (Totul, în afară de tipurile primitive, sunt obiecte)
365
+
366
+
O funcție este un tip special de obiect. Codul pe care îl scrii tu însuți nu este funcția efectivă. Funcția este un obiect cu proprietăți. Această proprietate este invocabilă.
0 commit comments