Junior
Qual è la differenza tra una funzione classica e una funzione freccia in JavaScript?
sobes.tech AI
Risposta dell'AI
La principale differenza riguarda come lavorano con this.
Una funzione classica ha il suo this proprio, che viene determinato dal contesto in cui viene chiamata (come è stata invocata).
Una funzione arrow non ha il suo this proprio. eredita this lessicalmente dall'ambiente in cui è stata definita.
Altre differenze:
- Oggetto
arguments: Le funzioni classiche hanno accesso all'oggettoarguments, le arrow no (ma si possono usare i parametri rest). - Costruttori: Le funzioni classiche possono essere usate come costruttori con l'operatore
new. Le arrow, no. - Proprietà
prototype: Le funzioni classiche hanno la proprietàprototype. Le arrow, no.
Esempio di utilizzo di this:
// Esempio con funzione classica
const obj = {
name: 'Oggetto',
greet: function() {
console.log(this.name); // this si riferisce a obj
}
};
obj.greet(); // Mostra: Oggetto
const greetFunc = obj.greet;
greetFunc(); // Mostra: undefined (o Window nel browser) - this perde il contesto di obj
// Esempio con funzione arrow
const objArrow = {
name: 'Oggetto con freccia',
greet: () => {
console.log(this.name); // this eredita il contesto esterno (in questo caso global o Window)
}
};
objArrow.greet(); // Mostra: undefined (o il nome della finestra nel browser, se name è definito globalmente)
const greetArrowFunc = objArrow.greet;
greetArrowFunc(); // Mostra: undefined (o il nome della finestra nel browser) - this non cambia