Фото автора Nangialai Stoman на Unsplash

Это продолжение предыдущего блога 20 вопросов на собеседовании по JavaScript с ответами по коду.

В этом блоге мы рассмотрим 10 часто задаваемых вопросов о JavaScript и дадим соответствующие ответы.

  1. В чем разница между функциями setTimeout() и setInterval() в JavaScript

setTimeout() и setInterval() — это встроенные функции в JavaScript, которые используются для задержки выполнения функции. Основное отличие состоит в том, что setTimeout() будет выполнять функцию один раз после указанной задержки, а setInterval() будет выполнять функцию повторно после указанной задержки.

// setTimeout() example
setTimeout(() => {
  console.log('Hello world!');
}, 1000); // output: Hello world! (after 1 second)
// setInterval() example
let counter = 0;
let intervalId = setInterval(() => {
  counter++;
  console.log(`Counter: ${counter}`);
}, 1000); // output: Counter: 1, Counter: 2, Counter: 3, ... (every 1 second)
// Stop setInterval() after 5 seconds
setTimeout(() => {
  clearInterval(intervalId);
}, 5000); // Stop after 5 seconds

2. Какова цель функции обратного вызова в JavaScript? Приведите пример.

Функция обратного вызова в JavaScript — это функция, которая передается в качестве аргумента другой функции и выполняется внутри этой функции. Он обычно используется в асинхронном коде для обработки результата операции.

Пример:

function fetchData(callback) {
  setTimeout(() => {
    callback('Data fetched successfully!');
  }, 2000);
}
function handleData(data) {
  console.log(data);
}
fetchData(handleData); // output: Data fetched successfully!

3. Как удалить дубликаты из массива в JavaScript?

В JavaScript вы можете удалить дубликаты из массива, используя объект Set и оператор расширения (...).

let arr = [1, 2, 3, 1, 2, 4];
let uniqueArr = [...new Set(arr)];
console.log(uniqueArr); // output: [1, 2, 3, 4]

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

4. Как преобразовать строку в число в JavaScript?

В JavaScript вы можете преобразовать строку в число, используя методы parseInt() или parseFloat().

let str = '123';
let num = parseInt(str);
console.log(num); // output: 123
let floatStr = '3.14';
let floatNum = parseFloat(floatStr);
console.log(floatNum); // output: 3.14

5. Что такое замыкание в JavaScript? Приведите пример.

Замыкание в JavaScript — это функция, которая имеет доступ к переменным в своей внешней области видимости, даже после возврата внешней функции. Он обычно используется для создания частных переменных и функций. Ниже приведен пример:

function createCounter() {
  let count = 0;
  return function() {
    count++;
    console.log(count);
  }
}
let counter = createCounter();
counter(); // output: 1
counter(); // output: 2
counter(); // output: 3

6. Каково назначение ключевого слова this в JavaScript?

Ключевое слово this в JavaScript — это ссылка на объект, который в данный момент выполняет код. Его значение зависит от того, как вызывается функция. Он обычно используется в объектно-ориентированном программировании для доступа к свойствам и методам объекта.

let person = {
  name: 'John',
  greet: function() {
    console.log(`Hello, my name is ${this.name}`);
  }
}
person.greet(); // output: Hello, my name is John

В этом примере метод greet() объекта person использует ключевое слово this для доступа к свойству name объекта. При вызове метода this ссылается на объект person.

7. Как реализовать функцию устранения дребезга в JavaScript?

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

function debounce(func, delay) {
  let timeoutId;
  return function(...args) {
    clearTimeout(timeoutId);
    timeoutId = setTimeout(() => {
      func.apply(this, args);
    }, delay);
  };
}
function onSearchInput(event) {
  console.log(event.target.value);
}
let debouncedOnSearchInput = debounce(onSearchInput, 500);
document.getElementById('search-input').addEventListener('input', debouncedOnSearchInput);

В этом примере функция debounce() принимает функцию func и время задержки delay в качестве аргументов и возвращает новую функцию, которая вызовет func с задержкой delay миллисекунд. Метод clearTimeout() используется для отмены предыдущего тайм-аута и запуска нового каждый раз при вызове возвращаемой функции, так что func вызывается только один раз после указанной задержки.

8. Как реализовать основанную на промисах версию setTimeout() в Node.js или JavaScript?

Node.js предоставляет встроенную функцию setTimeout() для задержки выполнения кода. Однако он не возвращает промис, что в некоторых случаях может затруднить работу. Вот пример реализации основанной на промисах версии setTimeout().

function delay(timeout) {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve();
    }, timeout);
  });
}
delay(1000).then(() => {
  console.log('Delayed code executed');
});

В этом примере функция delay() принимает значение тайм-аута в качестве аргумента и возвращает обещание, которое разрешается после указанного тайм-аута. Метод then() используется для выполнения кода после разрешения промиса.

9. Как реализовать алгоритм бинарного поиска в JavaScript?

Алгоритм бинарного поиска — это алгоритм быстрого поиска, который работает путем деления отсортированного массива пополам и повторного исключения половины оставшихся элементов до тех пор, пока не будет найдено целевое значение или не останется элементов для поиска.

Пример:

function binarySearch(array, target) {
  let left = 0;
  let right = array.length - 1;
  while (left <= right) {
    let mid = Math.floor((left + right) / 2);
    if (array[mid] === target) {
      return mid;
    } else if (array[mid] < target) {
      left = mid + 1;
    } else {
      right = mid - 1;
    }
  }
  return -1;
}
let arr = [1, 3, 5, 7, 9];
console.log(binarySearch(arr, 5)); // output: 2
console.log(binarySearch(arr, 6)); // output: -1

10. Как реализовать функцию, которая возвращает случайный элемент из массива в JavaScript?

Ниже приведен пример реализации функции, которая возвращает случайный элемент из массива в JavaScript.

function getRandomItem(array) {
  return array[Math.floor(Math.random() * array.length)];
}
let arr = [1, 2, 3, 4, 5];
console.log(getRandomItem(arr)); // output: a random item from the array

В этом примере функция getRandomItem() принимает массив в качестве аргумента и возвращает случайный элемент из массива, используя Math.random() и Math.floor(). Функция сначала умножает Math.random() на длину массива, чтобы получить случайный индекс, а затем использует Math.floor() для округления индекса до целого числа. Затем функция возвращает элемент массива со случайным индексом.

мы рассмотрели 10 часто задаваемых вопросов на собеседованиях для разработчиков JavaScript и Node.js среднего и старшего уровня. Эти вопросы охватывают целый ряд тем, от работы с массивами и строками до реализации алгоритмов и шаблонов проектирования.

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

В случае, если вы не читали первую часть этой серии вопросов для интервью по JavaScript, я рекомендую вам ознакомиться с нашей первой записью в блоге на эту тему: 20 вопросов для интервью по JavaScript с ответами по коду.

Спасибо за прочтение, и мы надеемся, что вы нашли этот пост полезным при подготовке к интервью.

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