Sunteți pe pagina 1din 8

Javascript

Metode de afișare a datelor, variabile,


tipuri și instrucțiuni repetitive

Elaborat: Constantin Cuciurcă


Variabilele în JS pot fi definite cu ajutorul: var, let, const.
Pentru a înțelege beneficiile let și const este necesar de a înțelege var.
Este important ca intenționat să declarați variabilele într-un scope specific,
utilizând var, pentru a menține codul lizibil și posibil de menținut.
var x = "outside";
function foo() {
Codul din dreapta declară x atât în afara funcției var x = "inside";
foo cât și înăuntru, utilizând var, totuși ce se console.log(x);
întâmplă fără var în foo? }
foo(); // inside
console.log(x); // outside

var x = "outside";
Ei bine, x în afara funcției foo a fost function foo() {
x = "inside";
reinițializat de x în funcție deoarece nu am console.log(x);
specificat că scope-ul lui x trebuie să fie restrâns }
în foo! foo(); // inside
console.log(x); // inside

*scope – domeniu de vizibilitate


Hoisting recomandări

Declarați variabilele utilizând var în partea de sus a scope-ului curent

console.log('sup')
var i = 0;
E ok de scris astfel:

var i = 0;
console.log('sup')
Dar e mai bine de scris astfel:

*hoisting (eng - ridicare) – procesul prin care JS ridică declarările


în partea de sus a scope-ului ei
Hoisting

Declarările variabilelor definite cu var mereu sunt ridicate în partea de sus a


scope-ului ei.

j nu a fost declarat așa că programul console.log(j); // ReferenceError: j is not


defined
produce eroare cu referire la faptul console.log(i); // undefined
nedeclarării variabilei date. var i = 0;

i a fost declarat înainte să fie afișat din cauza la


var i;
ridicarea variabilelor, așa a fost interpretat console.log(i);
codul: i = 0;

Interpretatorul a ridicat declararea variabilei în


partea de sus a scope-ului, dar variabila nu a fost
inițializată cu 0 încă, ca și cum interpretatorul
știe că variabila există, dar nu știe ce valoare a
re i pentru că nu a fost asignat nimic ei.
Domeniu de vizibilitate în funcție

Domeniul de vizibilitate la var este limitat la funcția unde a fost definită

function foo() {
var i = 0;
}
console.log(i); // ReferenceError: i is not defined

i este declarat doar în funcție, în afara ei ea nu este accesibilă.

Domeniul de vizibilitate la var nu este limitată la blocul de cod unde a fost


declarată

În această secțiune de cod i a rămas la fel var i = 0


în domeniul de vizibilitate global și a fost if (true) {
reinițializat, ceea ce este o acțiune pe var i = 1;
care nu o inteționam. }
console.log(i); // 1
Variabilele declarate cu let au domeniul de vizibilitate bazat pe blocul în care
au fost declarate. domeniu de vizibilitate specific = puține greșeli

În cazul dat i a fost inițializat cu 1 în blocul if, let i = 0;


domeniul de vizibilitate este limitat la acel bloc și if (true) {
în d.v. global i este 0, d.v. global a fost separat de let i = 1;
cel din blocul if. }
console.log(i); // 0

Ceea ce ține de const, variabilele declarate cu const nu pot fi reinițializate.

const i = 0;
i = 1; // TypeError: Assignment to constant variable.

const i; // SyntaxError: Missing initializer in const declaration


const nu permite declararea variabilei fără valoare
const la fel ca let are d.v. limitat la bloc
const permite mutații atât în obiecte cât și în tablou
let/const nu au valoare inițiale în hoisting de asta o să producă eroare în
accesarea lor înainte de declarare.
console.log(a); // undefined
var a = 2;
console.log(b); // Uncaught ReferenceError: b is not defined
console.log(c); // Uncaught ReferenceError: c is not defined
let c = 2;

Acest lucru ne apără de erori de utilizare a function isEqualTo5(n) {


variabilelor înainte de declarări astfel return !(n - five);
funcțiaisEqualTo5 are un bug ea returneaza mereu var five = 5;
}
true. console.log(isEqualTo5(4)); // true
Problema e că five a fost declarat în timpul
executării în return dar ea are valoarea
undefined,
!(4 - undefined) === !(NaN) === true

Cu ajutorul let/const putem găsi eroarea


function isEqualTo5(n) {
return !(n - five);
const five = 5;
}
console.log(isEqualTo5(4)); // ReferenceError: five is not
defined
Link-uri utile:

https://hackernoon.com/js-var-let-or-const-67e51dbb716f

https://medium.com/@PrintSupWorld/function-hoisting-declarations-vs-expressions-
7f4d385a5d7f

S-ar putea să vă placă și