Skip to content

Commit e2ee9c0

Browse files
committed
Added the questions from 1-10
1 parent d8f0963 commit e2ee9c0

File tree

1 file changed

+322
-0
lines changed

1 file changed

+322
-0
lines changed

ro-RO/README.ro.md

Lines changed: 322 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,325 @@ Nu ezita să mă contactezi! 😊 <br />
4747
</details>
4848

4949
---
50+
51+
###### 1. Care este rezultatul?
52+
53+
```javascript
54+
function sayHi() {
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+
const shape = {
117+
radius: 10,
118+
diameter() {
119+
return this.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+
const bird = {
178+
size: "small",
179+
};
180+
181+
const mouse = {
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.
235+
236+
<img src="https://i.imgur.com/ko5k0fs.png" width="200">
237+
238+
Când modifici un obiect, le modifici pe toate.
239+
240+
</p>
241+
</details>
242+
243+
---
244+
245+
###### 7. Care este rezultatul?
246+
247+
```javascript
248+
let a = 3;
249+
let b = new Number(3);
250+
let c = 3;
251+
252+
console.log(a == b);
253+
console.log(a === b);
254+
console.log(b === c);
255+
```
256+
257+
- A: `true` `false` `true`
258+
- B: `false` `false` `true`
259+
- C: `true` `false` `false`
260+
- D: `false` `true` `true`
261+
262+
<details><summary><b>Răspuns</b></summary>
263+
<p>
264+
265+
#### Răspuns: C
266+
267+
`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+
class Chameleon {
282+
static colorChange(newColor) {
283+
this.newColor = newColor;
284+
return this.newColor;
285+
}
286+
287+
constructor({ newColor = "green" } = {}) {
288+
this.newColor = newColor;
289+
}
290+
}
291+
292+
const freddie = new Chameleon({ 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+
function bark() {
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ă.
367+
368+
</p>
369+
</details>
370+
371+
---

0 commit comments

Comments
 (0)