ypx fbpx
Непростые вопросы: JavaScript-собеседование
Если вы готовитесь к собеседованию на должность веб-разработчика, наша статья с подборкой сложных вопросов точно поможет вам в подготовке.
Веб-разработка
460

1. Что такое IIFE?


IIFE (Immediately Invoked Function Expression) — это конструкция, позволяющая вызывать функцию непосредственно после ее определения.

(function IIFE(){

    console.log( "Hello, Itlogia!" );

})();

// "Hello, Itlogia!"

Чаще всего она используется, чтобы не допустить загрязнения глобального пространства имён. Переменные, объявленные в IIFE, невидимы за пределами этой функции.


2. Для чего нужны анонимные функции?


Если после function есть имя (идентификатор) — функция именованная, во всех остальных случая анонимная.

Анонимные функции — это такие функции, которые используются при создании IIFE-конструкций. Они ставятся в одном месте программы и позволяют сделать код более самодостаточным и читабельным, что избавляет от необходимости просматривать код в поиске тела функции.


3. Расскажите о методе Function.prototype.bind()


Метод bind() создает новую функцию, которая при вызове имеет ключевое слово this, установленное на предоставленное значение, с заданной последовательностью аргументов, предшествующей любым, предоставленным при вызове новой функции.

Метод .bind() особенно полезен для привязки значения this в методах классов, которые нужно передавать в другие функции.


4. Что такое «генераторы» и когда следует их использовать?


Генераторы являются функциями с возможностью выхода и последующего входа. Их контекст исполнения (значения переменных) сохраняется при последующих входах.

Когда вызывается функция-генератор, её тело исполняется не сразу; вместо этого возвращается объект-итератор. При вызове метода next() итератора тело функции-генератора исполняется до первого встреченного оператора yield, который определяет возвращаемое значение или делегирует дальнейшее выполнение другому генератору при помощи yield* anotherGenerator().

Метод next() возвращает объект со свойством value, содержащим отданное значение, и свойством done, которое указывает, что генератор уже отдал своё последнее значение. Вызов метода next() с аргументом прекращает выполнение функции-генератора, и заменяет инструкцию yield на которой было приостановлено выполнение на аргумент переданный в next().

Когда стоит использовать генераторы?


  • Когда код, в котором используется генератор, сам определяет момент получения следующего значения. Генератор отвечает только за возврат значений, управление им осуществляется извне.
  • Когда существуют асинхронные генераторы. Они позволяют работать с асинхронными потоками данных.


5. Что такое «поднятие переменных»?


Поднятие (hoisting) переменных означает сослаться на переменную, которая объявляется позже, и не получить при этом исключения. переменные в JavaScript поднимаются в самое начало функции или выражения. Однако, переменные, которые еще не были инициализированы, возвратят значение undefined:

<span class="token"></span>
/* * Пример 1 */ console.log(x === undefined);

<code></code>// true var x = 3;

<code></code>/* * Пример 2 */ var myvar = "my value"; (function() { console.log(myvar);

<code></code>// undefined var myvar = "local value"; })();
<span class="token"></span>


6. Что выведет следующий код?


var output = (function(x) {
delete x;
return x;
})(0);

console.log(output);

Результат кода — 0. Оператор delete используется для удаления свойств объектов, а x не является свойством объекта. х — это локальная переменная. Оператор delete не воздействует на локальные переменные.


7. Объясните особенности проверки равенства значений в JavaScript?


В JavaScript есть два оператора для проверки равенства величин. Первый — оператор строгого равенства. Второй — оператор нестрогого равенства, при использовании которого может производиться преобразование типов проверяемых величин.

  • Оператор строгого равенства (===) проверяет значения на равенство, не выполняя при этом преобразования типов.
  • Оператор нестрогого равенства (==) проверяет значения на равенство, выполняя их приведение к общему типу.

<span class="hljs-keyword"></span>
var a = "42";
var b = 42;
<code></code>a == b;         

// true <code></code>a === b;       
// false


Есть целый ряд правил, касающихся использования различных операторов проверки равенства в JavaScript:

  • Если любое из сравниваемых значений может быть значением true или false — постарайтесь избегать оператора ==. Используйте оператор ===.
  • Используйте оператор === в том случае, если работаете со следующими значениями: 0, «» или [ ] (пустой массив).
  • Во всех остальных случаях можете безопасно использовать оператор ==. Причём, это не только безопасно, но и способствует упрощению кода и улучшению его читабельности.


8. Объясните разницу между ES6-классами и конструкторами функций?


Основная разница между конструкторами и классами проявляется при использовании наследования. Если нам нужно создать класс Student, являющийся подклассом класса Person, и добавить к этому новому классу поле studentId, то вот как будет выглядеть код, в котором используются конструкторы, и код, в котором применяются классы. Рассмотрим примеры.

Функция-конструктор:

function Person(name) {
  this.name = name;
}

ES6-класс:

class Person {
  constructor(name) {
    this.name = name;
  }
}

Функция-конструктор:

function Student(name, studentId) {
  // Вызываем конструктор суперкласса для инициализации полей, унаследованных от  него.

  Person.call(this, name);

  // Инициализация собственных полей объекта.
  this.studentId = studentId;
}

Student.prototype = Object.create(Person.prototype);
Student.prototype.constructor = Student;

ES6-класс:

class Student extends Person {
  constructor(name, studentId) {
    super(name);
    this.studentId = studentId;
  }
}
Понравилась статья? Сохраните её в своих соц. сетях!
обучайся с нами профессии
Веб-разработчик
Подробнее о курсе
Читайте другие статьи
Где junior разработчику искать первых клиентов?
Мы сделали подборку мест для поиска первых клиентов начинающему веб-разработчику.
Веб-разработка
680
GitLab и GitHub: в чем различия?
И GitLab и GitHub являются веб-репозиториями Git. В этой статье мы разберемся что такое репозиторий и в чем различия между GitLab и GitHub.
Веб-разработка
1780
Чем занимается веб-верстальщик?
Из этой статьи вы узнаете, что сегодня входит в обязанности веб-верстальщика и какими базовыми навыками должен обладать начинающий верстальщик.
Веб-разработка
412
Получайте первыми свежие статьи из нашего блога прямо на вашу почту
Введите корректный e-mail
Никакого спама. Только ценные и полезные статьи для вас!