Во время моих последних раундов собеседований меня несколько раз просили написать Polyfills, поэтому в этом посте я объясню «Часто задаваемые Polyfills для фронтенд-интервью».
Начну с того, что такое заливки Polyfills и зачем они нужны.
Полифилл или полифиллер — это часть кода (или подключаемый модуль), предоставляющая технологию, которую вы, разработчик, ожидаете от браузера в исходном виде. Например, полифилл можно использовать для имитации функциональности Array.flat в IE7 с использованием стека или рекурсии или чего-то еще, что вам нужно, поскольку Array.flat изначально не поддерживается IE7.
Теперь, когда вы знаете, что такое полифиллы, позвольте мне начать с написания часто задаваемых полифиллов-массивов на JavaScript.
Array.map
Перед написанием полифилла нужно понять, как работает функция.
В случае Array.map
- Он принимает функцию обратного вызова, которая выполняется для каждого элемента массива, и thisArg (необязательно).
- Функция обратного вызова имеет 3 аргумента — элемент, индекс и сам массив.
- Карта возвращает новый массив и не изменяет исходный массив.
На основе этой информации мы можем создать polyfill customMap.
- Polyfill должен быть присоединен к прототипу, чтобы к нему можно было получить доступ как к свойству массива.
- this внутри функции указывает на массив, для которого вызывается customMap.
Точно так же мы можем написать остальные полифиллы Array.
Array.reduce (наиболее часто задаваемые)
- Reduce принимает два аргумента: функцию обратного вызова и начальное значение (необязательно).
- Функция обратного вызова принимает 4 аргумента: аккумулятор, который является результатом вычисления предыдущих значений, текущее значение, индекс и массивы являются необязательными.
- Сокращение имеет много применений, например, сумму всех элементов в массиве или с точки зрения интервью, его также можно использовать как функцию конвейера.
- Точно так же вас могут попросить написать polyfill для reduceRight.
Массив.фильтр
- Он похож на Array.map, с той лишь разницей, что в массив будут помещены только те элементы, которые удовлетворяют функции обратного вызова.
- Длина отфильтрованного массива всегда будет меньше или равна исходному массиву.
- Элементы отфильтрованного массива не изменяются.
- Array.find похож на фильтр, вместо того, чтобы протолкнуть элемент, ему нужно было вернуть элемент, который удовлетворяет условию обратного вызова.
Array.flat (Также часто спрашивают)
- Здесь массив выравнивается с переданной ему зависимостью, по умолчанию массив выравнивается до одного уровня.
- Здесь для решения этой проблемы используется рекурсия, но ее также можно решить с помощью функции стека или генератора.
- Точно так же Array.flatMap можно было бы спросить в интервью.
Это все часто задаваемые полифилы Array, для полифиллов Promise, пожалуйста, посетите Часть 2 (крайне важно для интервью)
В качестве бонуса я также поделюсь еще одним очень часто задаваемым вопросом (спросил меня в Tekion, Practo & Paytm)
Связывать
- Bind используется для заимствования функций, он возвращает новую функцию, которую можно вызвать позже.
- Чтобы написать функцию customBind, вам нужно прикрепить ее к прототипу функции, поскольку Bind является частью прототипа функции.
- Разница между bind и call или apply заключается в том, что call и apply вызываются при их вызове, а bind возвращает функцию, которую можно вызвать позднее.
- Интервьюер может попросить вас напрямую написать полифилл связывания, или они могут представить вам сценарий, в котором вам нужно использовать функцию связывания, например, в setTimeout (спросил меня в Rippling), если вас попросят вызвать функцию с «этим» присутствует ключевое слово, то вам нужно связать его, иначе оно вернет значение undefined.
- Если вы знакомы с React, он и там широко используется.
Это все, ребята……
За частью 2 обращайтесь — https://medium.com/@souravsaha101/polyfills-polyfills-polyfills-part-2-419f88b23f8f
Подпишитесь на меня в LinkedIn по адресу https://www.linkedin.com/in/sourav-saha-66b37b92/