Объясните, как this работает в JavaScript
Нельзя в двух словах объяснить работу ключевого слова this; это одно из самых запутанных понятий в JavaScript. Говоря максимально простым языком, значение this зависит от того, как вызывается функция.
Применяются следующие правила:
1. Если ключевое слово new используется при вызове функции, this внутри функции является совершенно новым объектом.
2. Если для вызова/создания функции используются apply, call или bind, то this внутри функции — это объект, который передается в качестве аргумента.
3. Если функция вызывается как метод, например, obj.method(), то this — это объект, к которому принадлежит функция.
4. Если функция вызывается без контекста, то есть она вызывается без условий, описанных в пунктах выше, то this является глобальным объектом. В браузере это объект window. В строгом режиме (’use strict’), this будет undefined вместо глобального объекта.
5. Если применяются несколько из вышеперечисленных правил, то правило, которое выше выигрывает и устанавливает значение this.
6. Если функция является стрелочной функцией, то она игнорирует все вышеописанные правила и получает значение this из лексического окружения во время ее создания.
👉 @frontendInterview
Нельзя в двух словах объяснить работу ключевого слова this; это одно из самых запутанных понятий в JavaScript. Говоря максимально простым языком, значение this зависит от того, как вызывается функция.
Применяются следующие правила:
1. Если ключевое слово new используется при вызове функции, this внутри функции является совершенно новым объектом.
2. Если для вызова/создания функции используются apply, call или bind, то this внутри функции — это объект, который передается в качестве аргумента.
3. Если функция вызывается как метод, например, obj.method(), то this — это объект, к которому принадлежит функция.
4. Если функция вызывается без контекста, то есть она вызывается без условий, описанных в пунктах выше, то this является глобальным объектом. В браузере это объект window. В строгом режиме (’use strict’), this будет undefined вместо глобального объекта.
5. Если применяются несколько из вышеперечисленных правил, то правило, которое выше выигрывает и устанавливает значение this.
6. Если функция является стрелочной функцией, то она игнорирует все вышеописанные правила и получает значение this из лексического окружения во время ее создания.
👉 @frontendInterview
No oddities here
Ваша задача - написать простую функцию, которая отсортирует массив чисел и оставит в нем только четные числа.
Примеры:
👉 @frontendInterview
Ваша задача - написать простую функцию, которая отсортирует массив чисел и оставит в нем только четные числа.
Примеры:
noOdds( [0,1] ) => [0]
noOdds( [0,1,2,3] ) => [0,2]👉 @frontendInterview
Верно ли утверждение?
"Невозможно установить свойства background-color и background-image для одного элемента?
"Невозможно установить свойства background-color и background-image для одного элемента?
Anonymous Quiz
18%
Верно
82%
Неверно
Объясните, почему это не является IIFE:
Что необходимо изменить, чтобы это стало IIFE?
IIFE расшифровывается как Immediately Invoked Function Expression — немедленно вызываемое функциональное выражение.
Синтаксический анализатор JavaScript читает
Выражения, начинающиеся с function, считаются объявлениями функций. Оборачивая эту функцию внутри (), она становится функциональным выражением, которое затем может быть выполнено с последующим (). Подобные функции не отображаются в глобальной области видимости, и вы можете даже не указывать им имя, если вы не будете на них ссылаться.
`function foo(){ }();`?Что необходимо изменить, чтобы это стало IIFE?
IIFE расшифровывается как Immediately Invoked Function Expression — немедленно вызываемое функциональное выражение.
Синтаксический анализатор JavaScript читает
function foo(){ } (); как function foo(){ } и ();, где первое выражение — это объявление функции, а второе (пара скобок) — попытка вызова функции, но так как имя не указано, он выдает ошибку Uncaught SyntaxError: Unexpected token.
Вот два способа исправить это, которые заключаются в добавлении дополнительных скобок: (function foo(){ })() и (function foo(){ }()).Выражения, начинающиеся с function, считаются объявлениями функций. Оборачивая эту функцию внутри (), она становится функциональным выражением, которое затем может быть выполнено с последующим (). Подобные функции не отображаются в глобальной области видимости, и вы можете даже не указывать им имя, если вы не будете на них ссылаться.
Что такое замыкание и как/для чего его используют?
Замыкание — это комбинация функции и лексического окружения, в которой эта функция была объявлена. Слово “лексический” относится к тому факту, что лексическая область видимости использует место, где переменная объявлена в исходном коде, чтобы определить, где эта переменная доступна. Замыкания — это функции, которые имеют доступ к переменным внешней (замыкающей) функции — цепочке областей видимости даже после того, как внешняя функция вернулась.
Для чего его используют?
1. Конфиденциальность данных / эмуляция скрытых методов при помощи замыканий. Обычно используется в модульном паттерне.
2. Частичное применение функций или каррирование.
👉 @frontendInterview
Замыкание — это комбинация функции и лексического окружения, в которой эта функция была объявлена. Слово “лексический” относится к тому факту, что лексическая область видимости использует место, где переменная объявлена в исходном коде, чтобы определить, где эта переменная доступна. Замыкания — это функции, которые имеют доступ к переменным внешней (замыкающей) функции — цепочке областей видимости даже после того, как внешняя функция вернулась.
Для чего его используют?
1. Конфиденциальность данных / эмуляция скрытых методов при помощи замыканий. Обычно используется в модульном паттерне.
2. Частичное применение функций или каррирование.
👉 @frontendInterview
Возможно ли установить больше одной картинки на фон элемента с помощью CSS?
Anonymous Quiz
77%
Да
23%
Нет
В чем разница между `.call` и `.apply`?
Сходство заключается в том, что и .call, и .apply используются для вызова функций, а также первый параметр будет использоваться как значение this внутри функции. А разница в том, что .call в качестве следующих аргументов принимает аргументы, разделенные запятыми, в то время как .apply в качестве следующих аргументов принимает массив аргументов.
👉 @frontendInterview
Сходство заключается в том, что и .call, и .apply используются для вызова функций, а также первый параметр будет использоваться как значение this внутри функции. А разница в том, что .call в качестве следующих аргументов принимает аргументы, разделенные запятыми, в то время как .apply в качестве следующих аргументов принимает массив аргументов.
👉 @frontendInterview
Become A Ninja With Angular
Сегодня почти любое приложение сделано с помощью фреймворка, не потому что это легко: фреймворк предоставляет собственную экосистему, которую также надо изучать, как и язык, - а потому что это эффективно и надёжно. Angular - это популярный JavaScript-фреймворк, архитектурно выполненный в стиле MVC. Настоящее руководство проведёт вас по пути разработки сложного приложения с помощью этого фреймворка.
👉 @frontendInterview
Сегодня почти любое приложение сделано с помощью фреймворка, не потому что это легко: фреймворк предоставляет собственную экосистему, которую также надо изучать, как и язык, - а потому что это эффективно и надёжно. Angular - это популярный JavaScript-фреймворк, архитектурно выполненный в стиле MVC. Настоящее руководство проведёт вас по пути разработки сложного приложения с помощью этого фреймворка.
👉 @frontendInterview
Yes No Yes No
Напишите функцию, которая принимает массив чисел или строк, проходит по нему, забирая элементы через один. После того как все элементы пройдены, начинает проход сначала. В итоге должен получиться новый массив.
Примеры:
👉 @frontendInterview
Напишите функцию, которая принимает массив чисел или строк, проходит по нему, забирая элементы через один. После того как все элементы пройдены, начинает проход сначала. В итоге должен получиться новый массив.
Примеры:
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
// returns [1, 3, 5, 7, 9, 2, 6, 10, 8, 4]
var arr = ['this', 'code', 'is', 'right', 'the']
// returns ['this', 'is', 'the', 'right', 'code']👉 @frontendInterview
Angular и TypeScript, Сайтостроение для профессионалов
Если вы занимаетесь веб-разработкой — от веб-клиентов до полнофункциональных одностраничных приложений, — то фреймворк Angular будет для вас просто спасением. Этот ультрасовременный инструмент полностью интегрирован со статически типизированным языком TypeScript, который отлично вписывается в экосистему JavaScript.
👉 @frontendInterview
Если вы занимаетесь веб-разработкой — от веб-клиентов до полнофункциональных одностраничных приложений, — то фреймворк Angular будет для вас просто спасением. Этот ультрасовременный инструмент полностью интегрирован со статически типизированным языком TypeScript, который отлично вписывается в экосистему JavaScript.
👉 @frontendInterview
В каких случаях используется `document.write()`?
Когда
В Интернете есть несколько ответов, которые объясняют, что
👉 @frontendInterview
document.write() записывает строку текста в поток документа, открытого при помощи document.open().Когда
document.write() выполняется после загрузки страницы, он вызывает document.open, который очищает весь документ (<head> и <body> будут удалены!) и заменяет содержимое на заданное значение параметра. Подобный подход считается опасным и не рекомендуется его использовать.В Интернете есть несколько ответов, которые объясняют, что
document.write() используется в коде отслеживания или когда вы хотите добавить стили, которые должны работать только при включенном JavaScript. Он даже используется в шаблоне HTML5 для параллельной загрузки скриптов и сохранения порядка выполнения! Тем не менее, я подозреваю, что эти причины могут быть устаревшими, и в наши дни они могут быть достигнуты без использования document.write().👉 @frontendInterview
Что такое Feature detection и feature inference?
Feature detection (определение возможностей браузера)
Определение возможностей браузера заключается в определении, поддерживает ли браузер определенный блок кода - и если нет, то будет выполняться другой код, так что браузер всегда сможет обеспечить работоспособность и предотвратить сбои/ошибки в некоторых браузерах. Например:
Feature inference (предположение возможностей)
Предположение возможностей проверяет на наличие определенных возможностей, как и предыдущий подход, но использует другую функцию, которая предполагает, что определенная возможность уже существует, например:
Feature detection (определение возможностей браузера)
Определение возможностей браузера заключается в определении, поддерживает ли браузер определенный блок кода - и если нет, то будет выполняться другой код, так что браузер всегда сможет обеспечить работоспособность и предотвратить сбои/ошибки в некоторых браузерах. Например:
if ('geolocation' in navigator) {
// Можно использовать navigator.geolocation
} else {
// Обработка отсутствия возможности
}
Modernizr - отличная библиотека для обработки таких функций.Feature inference (предположение возможностей)
Предположение возможностей проверяет на наличие определенных возможностей, как и предыдущий подход, но использует другую функцию, которая предполагает, что определенная возможность уже существует, например:
if (document.getElementsByTagName) {
element = document.getElementById(id);
}
Этот подход не рекомендуется. Первый подход более надежен.Группировка запятыми
Напишите функцию, которая принимает число, преобразует его в строку и разделяет по три цифры запятой.
Пример
👉 @frontendInterview
Напишите функцию, которая принимает число, преобразует его в строку и разделяет по три цифры запятой.
Пример
1 -> "1"
10 -> "10"
100 -> "100"
1000 -> "1,000"
10000 -> "10,000"
100000 -> "100,000"
1000000 -> "1,000,000"
35235235 -> "35,235,235"👉 @frontendInterview