עשר שאלות לראיונות עבודה על JavaScript ES6
לכבוד קורס ES6/7/8 החדש קבלו עשר שאלות שהייתי שואל בראיון עבודה על הנושא. מוזמנים להתכונן או לקחת מכאן רעיונות (תלוי באיזה צד של השולחן אתם יושבים):
-
מה ההבדל בין var, let ו const? מה היה רע ב var? מתי נשתמש ב let ומתי ב const?
-
מה קורה כשמריצים את הקוד הבא? מדוע? איך תיצרו מערך שאי אפשר להוסיף אליו איברים?
const arr = [10, 20, 30];
arr.push(50);
-
מהו אוביקט Proxy? כיצד תשתמשו ב Proxy כדי לממש Private Data Members של מחלקה? מה היתרונות והחסרונות של גישה זו בהשוואה לשימוש ב Closures?
-
הקוד הבא מושך נתוני דמות משירות הרשת swapi.co ולאחר מכן את שמות כל הסרטים בהם הדמות הופיעה:
$.get('https://swapi.co/api/people/1', function(res) {
for (const url of res.films) {
$.get(url, function(filmData) {
console.log(filmData.title);
});
}
});
שכתבו את הקוד תוך שימוש ב Promises.
- כתבתי מחדש את הקוד משאלה (4) תוך שימוש ב async/await:
async function getFilms() {
const res = await $.get('https://swapi.co/api/people/1');
for (const url of res.films) {
const filmData =await $.get(url);
console.log(filmData.title);
}
}
איזה משני המימושים עובד יותר מהר? למה? תקנו את המימוש האיטי כך שיתנהג כמו המהיר.
-
מה ההבדל בין WeakMap ל Map? מתי נשתמש ב WeakMap?
-
כתבו מחלקה בשם BindAll שכל מחלקה שיורשת ממנה מקבלת
bind(this)
אוטומטי לכל המתודות שלה. דוגמת שימוש:
class Person extends BindAll {
constructor(name) {
this.name = name;
}
hello() {
console.log(this.name);
}
}
const p = new Person('John');
// waits 500 ms and then prints 'John'
setTimeout(p.hello, 500);
-
כתבו פונקציה בשם bindAll המקבלת מחלקה ומבצעת bind לכל המתודות שלה באופן אוטומטי.
-
כתבו פונקציה בשם fib כך שהקוד הבא יעבוד וידפיס את המספרים הקטנים מ-100 מסדרת פיבונאצ'י (סדרת פיבונאצי היא סידרת מספרים בה כל איבר שווה לסכום שני האיברים שלפניו):
for (let n of fib()) {
console.log(n);
if (n > 100) break;
}
- כתבו מחלקה בשם Fib כך שהקוד הבא יעבוד:
const fib10 = new Fib(10);
// iterates through the first 10 numbers of a fibonacci series
for (let n of fib10) {
console.log(n);
}