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 obiectularguments, 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 proprietateaprototype. 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ă