Итак, вы отличный разработчик JavaScript. Вам нравится работать на интерфейсе, и вы видите множество вакансий для этой роли. Но знаете ли вы свои основы? Вполне возможно, что вы можете быть отличным JS-разработчиком, и когда вам зададут простой вопрос, например, о разнице между var и let, вы на мгновение поставите в тупик.

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

В чем разница между «==» и «===» в JavaScript?

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

Разница между «==» и «===» в JavaScript заключается в том, что «==» сравнивает только значения двух выражений, а «===» сравнивает как значение, так и тип этих выражений. Возьмем, к примеру, следующее:

'1' == 1 // yields true
'1' === 1 // yields false

В первом случае «1» строка, а 1 целое число даст true с двойным равным. Используя тройное равенство, мы сравниваем не только значение, но и тип. Таким образом, строка «1» не является «===» для целого числа 1. Иногда это может быть сложной задачей, но это так же просто, как дополнительный уровень сравнения.

Разница между var, let, const

Это еще один вопрос, который очень часто задают в подобных молниеносных собеседованиях. Я уже рассказывал об этом в отдельной статье, и ее можно найти здесь https://medium.com/@hutselljustin/var-let-const-variable-declarations-with-es6-f3a2f9da37f5.

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

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

Разница между значениями null и undefined

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

Часто можно получить сообщение об ошибке, в котором говорится, что функция или переменная «не определена». Неопределенное в этом случае - это пустое значение, присвоенное переменной, которой не было присвоено значение. Например, если вы объявляете функцию и не включаете важную деталь, такую ​​как возвращаемое значение, или вызываете ее неправильно, функция вернет значение undefined, в то время как вы можете ожидать результата.

Значение NULL, которое также представляет собой пустое значение, назначается разработчиком намеренно. Иногда бывает так, что вы хотите, чтобы значение было объявлено как нулевое или пустое. В этом случае вы можете назначить его так:

let cat = null

Позже эту переменную можно переназначить или изменить, но дело в том, что вы присвоили ей значение null, различие между null и undefined.

Закрытие

Последняя концепция, которую я буду обсуждать, известна как «закрытие». Это еще один распространенный вопрос на собеседовании: «Что такое закрытие в JavaScript?».

Самое простое объяснение того, что такое закрытие, - это любая функция, к которой вы имеете доступ и можете использовать переменные или функции извне. Идея в том, что функция сохраняет данные своей внешней функции. Итак, если вы объявите функцию внутри другой, у вас будет доступ к переменным, объявленным в этой внешней функции. Замыкание можно суммировать как функцию с сохраненными данными. Вот пример:

function fullName(firstName, lastName) {
  let fullNameExpression = "My name is ";
  function sayName() {
    return fullNameExpression + firstName + " " + lastName
   }
  return sayName();
}

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

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