בראיון ב-Wix בשנת 2022, שאלה שחוזרת על עצמה בגרסאות שונות: "מה ידפיס הקוד הבא?"
javascript
const obj = {
name: "Wix",
greet: function() {
console.log(this.name);
},
greetArrow: () => {
console.log(this.name);
}
};
obj.greet(); // ?
obj.greetArrow(); // ?obj.greet() מדפיס "Wix". obj.greetArrow() מדפיס undefined - או בסביבות מסוימות, זורק שגיאה. מי שלא מבין למה Arrow Functions מתנהגות אחרת ב-this - לא יעבור את השאלה הזאת. מי שמבין - מסביר בשתי שורות ועובר.
פונקציות הן הליבה של JavaScript. כל מה שלמדנו עד כה - Variables, Operators, Loops - חי בתוך פונקציות. ולהבין איך פונקציות עובדות ב-JavaScript ספציפית, עם Hoisting ועם this, זה מה שמבדיל בין מי שכותב JavaScript לבין מי שמבין JavaScript.
Regular function vs Arrow function
function() { }
this דינמי
this נקבע דינמית לפי איך שקוראים לפונקציה
זמין לפני ההצהרה (Hoisting מלא)
קיים arguments object
verbose יותר בתחביר
() => { }
this lexical
this יורש מה-scope הסובב (lexical)
תחביר תמציתי, מתאים ל-callbacks
אין hoisting - לא ניתן לקרוא לפני ההגדרה
אין arguments - חייבים rest parameters