Шпаргалка для справки во время учебы

Подготовка к техническим собеседованиям может быть стрессовой, особенно для новых разработчиков (и не меньше во время пандемии!). К счастью, кажется, что существует повторяющийся ряд ключевых концептуальных вопросов, которые можно изучить и запомнить, как мы делали с учетными карточками в школе в детстве. Для начала вот 8 распространенных вопросов для технических собеседований по JavaScript, которые вы можете изучить и начать практиковать уже сегодня.

В чем разница между var, const и let?

Var, const и let - зарезервированные слова в JavaScript, которые позволяют объявлять и именовать переменные. До ES6 var был единственным вариантом для этого, а const и let были представлены в 2015 году.

Var позволяет объявлять переменную в любой области (глобальной, функции или блока), поднимается (более подробно описано ниже) и инициализируется значением 'undefined', что позволяет получить доступ к этой переменной, не вызывая ошибки в любой точке кода. . По этой причине вы также можете объявить переменную вообще без значения, и это все равно будет нормально. С помощью var вы также можете переназначить или повторно объявить значение этой переменной.

Let очень похож на var в том смысле, что он также позволяет вам переназначить или повторно объявить значение в любой момент, и вы можете назвать переменную без значения. В отличие от var, с let переменная оценивается только во время выполнения, поэтому мы получим ошибку, если на переменную будет сделана ссылка до того, как она будет записана в код. Вы также не можете объявить глобальную переменную с помощью let.

С const переменная всегда должна быть инициализирована значением, и это значение никогда не может быть изменено или объявлено повторно. Если вы попытаетесь сделать что-то одно, сразу же будет выдана ошибка. Const можно использовать для объявления переменной в любой области (включая глобальную), аналогично var.

Что такое подъем?

Подъем происходит на этапе компиляции JavaScript. Сначала код читается сверху вниз, и все глобальные переменные и имена функций «поднимаются» в память. После компиляции, на этапе выполнения, если ссылка на переменную или функцию указана выше там, где она фактически написана в коде, ошибка ссылки не будет выдана, поскольку она уже существует в памяти.

В чем разница между функциональным программированием и объектно-ориентированным программированием?

Функциональное программирование состоит исключительно из чистых функций. Чистая функция будет давать один и тот же результат каждый раз для одного и того же входа. Например, функция суммирования, которая складывает 2 + 2, всегда будет возвращать 4.

Объектно-ориентированное программирование сосредоточено на объектах и ​​их взаимосвязи. Объекты инкапсулируют данные и поведение (в форме функций или методов) и часто строятся со ссылкой на объекты реального мира. Объекты также могут наследовать дополнительные данные и функции от родительского объекта.

Классическое наследование и прототипное наследование

Классическое наследование описывает, как экземпляр класса наследует функциональность и атрибуты этого класса и любых других родительских классов. Например, если у вас есть класс Dog и класс Husky, расширяющий класс Dog, все созданные экземпляры Husky могут иметь функциональные возможности и атрибуты обоих классов.

Прототипное наследование относится к объектам, наследующим методы, доступные для всех экземпляров этого исходного или родительского объекта. Например, для всех новых массивов будут доступны Array.prototype методы, такие как Array.reduce, Array.sort или Array.filter.

В чем разница между == и ===?

Когда вы пытаетесь сравнить 2 разных значения с помощью ===, вы спрашиваете, являются ли эти 2 значения точно одинаковыми по значению И типу данных. Соответствует ли тип данных? Если есть буквы, соответствуют ли они верхнему или нижнему регистру? Есть ли лишние символы или пробелы? Обратите внимание, что если вы попытаетесь сравнить объекты, которые, казалось бы, выглядят одинаково, это все равно вернет false, поскольку объекты сохраняются в памяти по отдельности, и поэтому они не могут быть одинаковыми.

Если вы попытаетесь сравнить 2 значения с помощью ==, валидация будет менее оценена, поскольку тип данных не учитывается. Значения объектов с обеих сторон также могут быть принуждены к совпадению (например, преобразование строки в число), что потенциально может привести к неожиданному результату.

Что такое привязка функций?

При использовании обычных функций (другими словами, НЕ стрелочных функций) контекст this принадлежит объекту, который его вызвал. Иногда это может вызвать проблемы, если функция ожидает this контекст, отличный от того, который ей был дан. В приведенном ниже примере setTimeout заставил this ссылаться на Window, который не имеет атрибута goodFriend.

Чтобы обойти это, вы можете использовать .bind для привязки объекта к функции или, в качестве альтернативы, вы можете использовать стрелочные функции, которые были введены в ES6.

Что такое закрытие?

Замыкание - это функция JavaScript, относящаяся к области видимости. Вложенная функция будет иметь доступ к переменным и области внешней функции, но не наоборот.

Эта функция полезна для безопасного хранения переменных там, где они должны быть, и недоступности для других объектов, которые потенциально могут привести к ошибкам.

Как работает setTimeout / какие данные будут в console.log первыми?

Что будет на выходе следующей функции?

Ответ должен быть: 1, 4, 3, 2. Это связано с тем, что, когда функция встречает setTimeout (который является веб-API), она откладывает эту функцию обратного вызова на потом и запускает таймер, указанный в миллисекундах (например, 1000), в то время как он продолжает выполнять остальную часть функции. После того, как 1 и 4 будут зарегистрированы в консоли (поскольку у них нет барьеров для выполнения), обратный вызов setTimeout с самой короткой задержкой (3) будет перемещен из очереди задач в стек вызовов, а затем последний (2). Это видео углубляется в эту концепцию и отлично объясняет ее.

Это ни в коем случае не исчерпывающий список возможных вопросов на собеседовании по JavaScript, но, надеюсь, это даст вам хорошую отправную точку для справки в процессе обучения.

Удачи, у вас есть это! 👍

Уровень кодирования

Спасибо, что стали частью нашего сообщества! Подпишитесь на наш канал YouTube или присоединитесь к Интервью по программированию Skilled.dev.