Οι συναρτήσεις βέλους είναι πιο σύντομες, αλλά οι πραγματικές διαφορές είναι στη συμπεριφορά δεσμευσης, όχι μόνο στη σύνταξη.
const regular = function () {};
const arrow = () => {};
const short = x => x * 2; // implicit return for one expression
Οι συναρτήσεις βέλους είναι πιο σύντομες, αλλά οι πραγματικές διαφορές είναι στη συμπεριφορά δεσμευσης, όχι μόνο στη σύνταξη.
const regular = function () {};
const arrow = () => {};
const short = x => x * 2; // implicit return for one expression
1. Δεν έχουν δικό τους this — οι συναρτήσεις βέλους κληρονομούν το this από το περιβάλλον scope. Αυτή είναι η πιο σημαντική διαφορά και γιατί είναι εξαιρετικές για callbacks:
const timer = {
seconds: 0,
start() {
setInterval(() => this.seconds++, 1000); // ✅ `this` is timer
// a regular function here would have its own `this` (undefined) → bug
},
};
2. Δεν υπάρχει αντικείμενο arguments — χρησιμοποιήστε rest parameters:
const sum = (...args) => args.reduce((a, b) => a + b, 0);
3. Δεν μπορούν να χρησιμοποιηθούν ως κατασκευαστές — το new arrow() ρίχνει σφάλμα και δεν έχουν prototype.
const obj = {
name: "Ann",
greet: () => `Hi ${this.name}`, // ❌ `this` is NOT obj (it's outer scope)
greet2() { return `Hi ${this.name}`; }, // ✅ method needs dynamic `this`
};
Μην χρησιμοποιήσετε συναρτήσεις βέλους για μεθόδους αντικειμένων (δεν θα δεσμεύονται στο αντικείμενο) ή όταν χρειάζεστε δυναμικό this/arguments (χειριστές γεγονότων που βασίζονται στο this να είναι το στοιχείο).
Χρησιμοποιήστε συναρτήσεις βέλους για callbacks και σύντομες συναρτήσεις όπου η κληρονομιά του this είναι αυτό που θέλετε· χρησιμοποιήστε κανονικές συναρτήσεις για μεθόδους, κατασκευαστές και μεθόδους prototype.