10 вопросов и ответов на собеседовании по JavaScript, которые помогут вам получить следующую роль

10 вопросов и ответов на собеседовании по JavaScript, которые помогут вам получить следующую роль

6 июня 2022 г.

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

Вопросы и ответы на собеседовании по JavaScript для опытных кандидатов

В1. Что такое подъем в JavaScript? Объясните это фрагментом кода? (один из часто задаваемых вопросов на собеседовании по JavaScript)

Ответ:

Поднятие — это характер JavaScript по умолчанию, в котором объявления переменных идут сверху. Это означает, что если мы используем переменную в верхней части нашего кода, но она объявлена ​​в нижней части, то движок JS не выдаст никакой ошибки. Например:

console.log(a);
//some code
//some code
//some code
var a = 1;

Вывод кода будет «undefined». Это означает, что он не покажет никакой ошибки, потому что объявление переменной «а» идет вверху. Важно помнить, что let и const не поддерживают подъем. Только переменные, объявленные с ключевым словом var, поддерживают подъем.

В2. Почему let и const появились в ES6. Отличить var от let от const?

Ответ

До введения let и const существовал только var. У него были некоторые ограничения из-за его функционального объема. Но после введения let и const, оба из которых имеют блочную область видимости, эти ограничения были сняты. Вот почему они были введены. Объясним их различие:

константа

  1. Это статическая переменная блочной области.
  2. При объявлении некоторых переменных с помощью const необходима инициализация.
  3. Мы не можем изменить его значение после инициализации.
  4. Его нельзя повторно объявить.

пусть

  1. Это также блочная переменная.
  2. В этом случае инициализация не требуется.
  3. Мы можем изменить значение переменной, объявленной с помощью let.
  4. Кроме того, в этом случае мы не можем повторно объявлять переменные.

вар

  1. var по умолчанию имеет функциональную область.
  2. В этом случае инициализация не требуется.
  3. Да, мы можем изменить значение переменной, объявленной с помощью var.
  4. Да, в этом случае мы можем повторно объявить переменные.

Итак, это основные 4 отличия var, let и const.

В3. Что такое временная мертвая зона?

Ответ

Этот вопрос также связан с подъемом и областью видимости переменных. Это связано с let и const. Если мы хотим инициализировать переменную, но она еще не объявлена, она объявляется в приведенном ниже коде. Затем выдается эталонная ошибка, и это называется временной мертвой зоной. В этой зоне переменная временно неактивна. Например:

a = 4; // here JavaScript engine will give a reference error
// some code
// some code
let a;

:::информация В приведенном выше коде зона между инициализацией переменной и объявлением называется временной мертвой зоной.

:::

В4. Каким будет вывод консоли следующего кода и почему?

const a = []; //empty array assigned to static variable a
const b = []; //empty array assigned to static variable b
console.log(a === b);
console.log(a == b);

Ответ

Вывод:

ложь

ложь

Это связано с тем, что выделение памяти для обоих пустых массивов (a и b) различно. В случае массива JavaScript не сопоставляет значения, но сопоставляет ссылки (ячейки памяти). Именно по этой причине в обоих случаях вывод будет ложным.

В5. Каким будет вывод консоли следующего кода и почему?

setTimeout(() => {
console.log('1');
}, 0); 

console.log('2');

setTimeout(() => {
console.log('3');
}, 100);

Promise.resolve().then(() => {
console.log('4');
});

Ответ.

2

4

1

3

Причиной этого вывода является очередь задач для среды выполнения JavaScript. Значение 0 миллисекунд в setTimeout() не означает, что обратные вызовы будут выполняться через 0 миллисекунд.

Это зависит от общего количества ожидающих задач. Таким образом, сначала будет передано значение «2», затем Promise, а затем будут запущены обратные вызовы setTimeout().

В6. Запишите вывод следующего кода и объясните.

let x = 10;
function a() {
let x = 20;
b();
}
function b() {
console.log(x);
}
a();

Ответ

10

Да, ответ будет 10. Здесь мы вызываем a(). Который выполняет b(). Этот b() утешает значение x, равное 10, потому что он получает глобальное значение x. В b() определен еще один x, но его область действия находится только внутри блока. Вот почему в b() будет взято глобальное значение x.

В7. Напишите вывод следующего кода:

for(var j = 0; j <=2; j++){ setTimeout(()=>{
console.log(j);
},100)
}

Ответ.

3

3

3

Этот вывод связан с ***функциональным объемом ***var. Если мы используем здесь let вместо var, результат будет таким:

0

1

2

Это связано с тем, что в случае var полный цикл выполняется 3 раза, прежде чем setTimeout() вызывает обратный вызов. Поэтому, когда setTimeout() запускает обратный вызов, он получает значение i=3 каждый раз, потому что var имеет область действия по всей функции. Следовательно, он печатает значение 3 три раза.

Но в случае let каждый раз будет новое значение let из-за его блочной области действия. Следовательно, он печатает вывод как 0,1,2. Это также причина, по которой в ES6 были введены let и const. До ES6 такие задачи решались с помощью Замыканий.

В8. Что такое замыкания? Напишите простой пример замыкания.

Ответ

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

Таким образом, замыкания дают функции возможность запоминать внешние переменные даже после выполнения функции. Поясним на примере.

function closureExample() {
  var count = 1;
  function checkValue() { 
    console.log(count);
  }
  count++;
  return checkValue;
}

var counter = closureExample();
counter(); // result will be 2

Таким образом, в приведенном выше примере вы можете видеть, что значение внешней переменной count доступно для внутренней функции checkValue() даже после выполнения внешней функции. Все это из-за закрытия.

В9. Что такое IIFE в JS и где он используется?

Ответ

IIFE (произносится как iffee) означает выражение немедленно вызываемой функции. Это функциональное выражение, которое выполняется сразу после создания. Это означает, что нам не нужно вызывать его после создания, он будет выполнен по умолчанию. Синтаксис:

(function(){
// some code
// some code
// some code
})();

Или с помощью функции стрелки

(()=>{
// some code
// some code
// some code
})();

Основные варианты использования IIFE:

  • Мы можем использовать их, если хотим ограничить область действия переменной локальной и не хотим заполнять глобальную среду.
  • Когда мы используем функции таймера, такие как setTimeout(), в цикле for, они могут дать нам неожиданные результаты. Для решения таких проблем мы включили функции таймера в IIFE.

Вопрос 10. Чем стрелочные функции отличаются от обычных функций? (один из наиболее часто задаваемых вопросов на собеседовании по JavaScript)

Ответ

Стрелочные функции были представлены в ES6 и во многом отличаются от обычных функций, давайте обсудим:

<сильный>1. Другой синтаксис:

Да, первое визуальное отличие заключается в их синтаксисе, который, конечно же, отличается.

Обычная функция:

function example() {
//some code
}

Функция стрелки:

const example = () => {
//some code
}

Здесь мы создали example() в обоих случаях и можем видеть различный синтаксис для обоих.

<сильный>2. Неявный возврат

Обычные функции:

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

function example(value) {
return value + 1;
}

Итак, это наиболее распространенный случай возврата, который мы используем в JavaScript. Но в случае со стрелкой все по-другому.

Функция стрелки:

В этом случае синтаксис будет таким:

const example = (value) => value +1;

Здесь мы опустили фигурные скобки, и он автоматически вернул значение без оператора return.

<сильный>3. Конструкторы

Обычные функции:

Обычные функции можно использовать в качестве конструктора. Например:

function Example(param) {
this.param = param;
}
const ins = new Example('one');
console.log(ins instanceof Example)

В приведенном выше примере console.log будет иметь значение true.

Функции стрелок:

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

<сильный>4. Поведение этого

this также известен как контекст выполнения. Его поведение отличается как для обычных, так и для стрелочных функций.

У стрелочных функций нет собственного this, но в случае обычных функций у них есть собственный this. Следующий пример все очистит:

let obj = {
name: "Ankit",
arrowFunction:() => {
console.log("Hello " + this.name); // this won’t work here
},
regularFunction(){
console.log("Hi " + this.name); // this will work here
}
};
obj.arrowFunction();
obj.regularFunction();

Вывод:

Привет, не определено

Привет, Анкит

Таким образом, в случае стрелочной функции нет this и вывод this.name undefined, но в случае обычного вывода функции это Анкит.

Это наиболее часто задаваемые вопросы и ответы на собеседованиях по JavaScript как для опытных, так и для новичков.

Если у вас есть какие-либо сомнения, или предложения, или вы хотите что-то исправить в статье, пожалуйста, прокомментируйте ниже. Кроме того, если вы хотите больше такого контента, дайте мне знать, и я предоставлю контроль качества вместе с подходящими примерами программирования. Спасибо и всего наилучшего за интервью.

Обо мне

Я разработчик полного стека, работающий в многонациональной корпорации eClerx. Мои основные навыки: ReactJS, Angular и NodeJS.


Также опубликовано здесь.


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE