Головні новини
Ви тут: Головна / Цікаве / 5 Типових запитань на співбесіді на посаду JavaScript розробника

5 Типових запитань на співбесіді на посаду JavaScript розробника



JavaScript розробники користуються великим попитом у світі ІТ-технологій. Якщо це саме та професія, яка найкраще виражає ваші знання, у вас є багато можливостей для зміни роботодавця та для збільшення власного доходу. Але перш, ніж ви будете прийняті на роботу, ви повинні продемонструвати власні навички для вдалого проходження співбесіди. У цій статті розміщені 5 типових запитань, які використовують для того, щоб перевірити уміння кандидата на посаду JavaScript розробника і та відносні вирішення завдань. Це буде весело!

Питання №1: Область Видимості

Розглянемо наступний код:

(function() {
 var a = b = 5;
})();
console.log(b);

Що буде виведено в консолі?

Правильна відповідь:

Вищезгаданий код надрукує 5.

Хитрість цього питання полягає в тому, що код замикання включає два завдання, проте змінна «а» виражається за допомогою ключового слова var. Це означає, що «а» являється локальною змінною функції. І навпаки, змінна «b» присвоюється глобальній області видимості.

Ще одним важливим аспектом є те, що в даному питанні всередині функції не використовується строгий режим («use strict»). Якщо включити строгий режим, код видав би похибку «Невідома помилка: змінна b не визначена». Пам’ятайте, що строгий режим вимагає, щоб ви однозначно посилалися на глобальну область видимості, якщо це була передбачувана дія. Отже, ви повинні написати:

(function() {
 'use strict';
 var a = window.b = 5;
})();
 
console.log(b);

Питання №2: Створення «власних» методів

Визначте функцію «repeatify» на об’єкті «String». Функція приймає ціле число, яке визначає, наскільки часто повинен бути повторений рядок. Функція повертається до рядка, який був повторений вказану кількість разів. Наприклад:

console.log('hello'.repeatify(3));

Потрібно надрукувати hellohellohello.

Відповідь

Можливе виконання завдання показано нижче:

String.prototype.repeatify = String.prototype.repeatify || function(times) {
   var str = '';
 
   for (var i = 0; i < times; i++) {
      str += this;
   }
 
   return str;
};

Питання тестує знання розробника щодо наслідування в JavaScript і властивостей змінної «prototype». Воно також перевіряє, чи може розробник розширити власні функціональні типи даних (хоча це не обов’язково робити).

Важливо, щоб ви змогли продемонструвати те, що ви знаєте як не відміняти вже визначені функції. Це робиться шляхом тестування, яке показує, що функція не існує допоки ви не визначите її самостійно:

String.prototype.repeatify = String.prototype.repeatify || function(times) {/* code here */};

Цей метод особливо корисний, якщо вас попросили врегулювати функцію JavaScript.

Питання №3: Підняття

Що є результатом виконання цього коду і чому.

function test() {
   console.log(a);
   console.log(foo());
    
   var a = 1;
   function foo() {
      return 2;
   }
}
 
test();

Відповідь:

Результат цього коду – undefined і 2.

Причина цього полягає в тому, що змінні і функції є піднятими (переміщеними у верхню частину функції), але змінні не зберігають будь-яке присвоєне значення. Отже, в той час як змінна а виводиться, вона існує у функції, але вона все ще не залишається undefined. Кажучи іншими словами, наведений вище код еквівалентний наступному:

function test() {
   var a;
   function foo() {
      return 2;
   }
 
   console.log(a);
   console.log(foo());
    
   a = 1;
}
 
test();

Питання №4: Як this працює в JavaScript

Яким є результат наступного коду? Поясніть свою відповідь.

var fullname = 'John Doe';
var obj = {
   fullname: 'Colin Ihrig',
   prop: {
      fullname: 'Aurelio De Rosa',
      getFullname: function() {
         return this.fullname;
      }
   }
};
 
console.log(obj.prop.getFullname());
 
var test = obj.prop.getFullname;
 
console.log(test());

Відповідь:

Код виводить Aurelio De Rosa та John Doe. Причина в тому, що в JavaScript контекст функції, який посилається на ключове слово «this», залежить від того, як викликається функція, а не від того, як вона визначена.

В першому виклику console.log(), getFullname() викликається як функція об’єкта obj.prop. Отже, контекст відноситься до останнього і функція повертається до властивості «fullname» об’єкту. Навпаки, коли «getFullname()» присвоюється до змінної «test», контекст відноситься до глобального об’єкта (window). Таке трапляється тому, що змінна «test» неявним чином встановлюється як властивість даного об’єкта. З цієї причини, функція повертає значення властивості «fullname of window», яке в даному випадку є одним набором кодів в першому рядку фрагмента.

Питання №5: call() та apply()

Виправити попереднє питання таким чином, щоб останній console.log() виводив Aurelio De Rosа.

Відповідь

Це завдання може бути виправленим, змусивши контекст функції використовувати функції call() чи apply(). Якщо ви не знаєте, у чому полягає їх різниця, я пропоную вам почитати «Яка різниця між Function.call і Function.apply». У коді, приведеному нижче, я буду використовувати call(), але в цьому випадку apply() призведе до того самого результату:

console.log(test.call(obj.prop));

Висновки

У даній статті ми обговорили п’ять типових питань, які задають на співбесіді, щоб перевірити уміння розробника JavaScript. Наявні завдання можуть відрізнятися від інтерв’ю до інтерв’ю, але поняття і теми, як правило, залишаються досить схожими. Я сподіваюся, що ви весело провели час, тестуючи свої знання. У разі, якщо ви не знаєте деяких відповідей з цих питань, не хвилюйтеся: немає нічого, що досвід і навчання не змогли б виправити.

Якщо на співбесіді вам запропонували вирішити інші цікаві питання, не соромтеся поділитися ними з нами. Це допоможе багатьом розробникам.



Автор Володимир Гривінський



3 коментарі

  1. Сергій

    Питання №1. Питається про сферу використання а у відповіді якась програма з функцією.

Залишити коментар

Ваша електронна адреса не буде опублікована.

Вгору
UA TOP Bloggers