Непростые вопросы: JavaScript-собеседование
Если вы готовитесь к собеседованию на должность веб-разработчика, наша статья с подборкой сложных вопросов точно поможет вам в подготовке.
Веб-разработка
9809
12 марта 2021
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;
}
}
Читайте другие статьи
Правильный выбор редактора для кодинга – важная составляющая эффективной работы программиста. Разбираем, как найти инструмент, который станет вашим незаменимым помощником в программировании.
Веб-разработка
2013
29 апр. 2025
Если вы занимаетесь веб-версткой или Frontend-разработкой, то вам точно пригодятся CSS-препроцессоры. Узнайте, что это такое и как выбрать лучший препроцессор для своего проекта.
Веб-разработка
10493
10 окт. 2023
Ключевые принципы современной веб-разработки
Что актуально сегодня в веб-разработке? Узнайте, какие принципы нужно соблюдать в 2022 году для создания успешных сайтов.
Веб-разработка
22533
11 янв. 2022
Получайте первыми свежие статьи из нашего блога прямо на вашу почту
Никакого спама. Только ценные и полезные статьи для вас!