Sobes.tech
Junior

Care este diferența dintre o funcție clasică și o funcție săgeată în JavaScript?

sobes.tech AI

Răspuns de la AI

Principala diferență constă în modul în care acestea lucrează cu this.

O funcție clasică are propriul this, care este determinat de contextul în care este apelată (cum a fost invocată).

O funcție săgeată nu are propriul this. Ea moștenește this lexical din mediul în care a fost definită.

Alte diferențe:

  • Obiectul arguments: Funcțiile clasice au acces la obiectul arguments, cele săgeată — nu (dar se pot folosi parametri rest).
  • Constructorii: Funcțiile clasice pot fi folosite ca și constructori cu operatorul new. Cele săgeată — nu.
  • Proprietatea prototype: Funcțiile clasice au proprietatea prototype. Cele săgeată — nu.

Exemplu de lucru cu this:

// Exemplu cu funcție clasică
const obj = {
  name: 'Obiect',
  greet: function() {
    console.log(this.name); // this face referire la obj
  }
};

obj.greet(); // Va afișa: Obiect

const greetFunc = obj.greet;
greetFunc(); // Va afișa: undefined (sau Window în browser) - this pierde contextul obiectului
// Exemplu cu funcție săgeată
const objArrow = {
  name: 'Obiect cu săgeată',
  greet: () => {
    console.log(this.name); // this moștenește contextul extern (în acest caz global sau Window)
  }
};

objArrow.greet(); // Va afișa: undefined (sau numele ferestrei în browser, dacă name este definit global)

const greetArrowFunc = objArrow.greet;
greetArrowFunc(); // Va afișa: undefined (sau numele ferestrei în browser) - this nu se schimbă