עשר שאלות לראיונות עבודה על JavaScript ES6

05/05/2018

לכבוד קורס ES6/7/8 החדש קבלו עשר שאלות שהייתי שואל בראיון עבודה על הנושא. מוזמנים להתכונן או לקחת מכאן רעיונות (תלוי באיזה צד של השולחן אתם יושבים):

  1. מה ההבדל בין var, let ו const? מה היה רע ב var? מתי נשתמש ב let ומתי ב const?

  2. מה קורה כשמריצים את הקוד הבא? מדוע? איך תיצרו מערך שאי אפשר להוסיף אליו איברים?

const arr = [10, 20, 30];
arr.push(50);
  1. מהו אוביקט Proxy? כיצד תשתמשו ב Proxy כדי לממש Private Data Members של מחלקה? מה היתרונות והחסרונות של גישה זו בהשוואה לשימוש ב Closures?

  2. הקוד הבא מושך נתוני דמות משירות הרשת 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.

  1. כתבתי מחדש את הקוד משאלה (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);
    }
}

איזה משני המימושים עובד יותר מהר? למה? תקנו את המימוש האיטי כך שיתנהג כמו המהיר.

  1. מה ההבדל בין WeakMap ל Map? מתי נשתמש ב WeakMap?

  2. כתבו מחלקה בשם 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);
  1. כתבו פונקציה בשם bindAll המקבלת מחלקה ומבצעת bind לכל המתודות שלה באופן אוטומטי.

  2. כתבו פונקציה בשם fib כך שהקוד הבא יעבוד וידפיס את המספרים הקטנים מ-100 מסדרת פיבונאצ'י (סדרת פיבונאצי היא סידרת מספרים בה כל איבר שווה לסכום שני האיברים שלפניו):

for (let n of fib()) {
    console.log(n);
    if (n > 100) break;
}
  1. כתבו מחלקה בשם Fib כך שהקוד הבא יעבוד:
const fib10 = new Fib(10);

// iterates through the first 10 numbers of a fibonacci series
for (let n of fib10) {
    console.log(n);
}