Непростые вопросы: JavaScript-собеседование
Если вы готовитесь к собеседованию на должность веб-разработчика, наша статья с подборкой сложных вопросов точно поможет вам в подготовке.
Веб-разработка
7523
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; } }
Читайте другие статьи
Как прокачать навык кодинга и почему его трудно освоить
Освоить навык кодинга под силу любому, кто этого действительно хочет. Почему же написание кода вызывает так много сложностей при изучении языков программирования, фреймворков и прочих технологий разработки даже при наличии подробных инструкций?
Веб-разработка
3533
27 июня 2023
10 ресурсов для изучения Vue.js в 2020 году
Владеть фреймворком Vue.js крайне важно для любого разработчика. В этой статье вы найдете 10 платных и бесплатных ресурсов для самостоятельного изучения фреймворка Vue.js.
Веб-разработка
10782
29 сент. 2020
Кто такие frontend, backend, full stack-разработчики?
Из этой статьи вы узнаете, кто это такие эти разработчики, чем каждый из них занимается и чем их задачи отличаются.
Веб-разработка
23849
5 дек. 2019
Получайте первыми свежие статьи из нашего блога прямо на вашу почту
Никакого спама. Только ценные и полезные статьи для вас!