(https://hh.ru/applicant/skills/674/verification_methods?rank=2&kind=theory)
-
Как можно узнать, по какому именно элементу кликнули, в рамках делегирования событий на родителе?
-> используя event.target
(другие варианты: Через window.event.srcElement; Только вручную выбирая селектор; через this внутри обработчика; через event.currentTarget;) -
Нужно реализовать систему локализации интерфейса. Каждая строка интерфейса должна иметь несколько переводов на разные языки. Необходимая функциональность:
- Хранение переводов на русском, английском и других языках
- Быстрый поиск перевода по ключу и языку
- Возможность обновлять и добавлять новые переводы
-> Создать объект, где ключи — это языки, а значение — объект со строковыми ключами и значениями переводов
(другие варианты: Использовать массив, где каждый элемент — это пара “ключ-строка, перевод”; Хранить всё в одной огромной JSON-строке и регулярно её парсить; Сделать глобальную переменную для каждого языка и записывать переводы вида: en_key: перевод; Построить единый массив всех переводов и искать по индексу;)
- Какую концепцию наследования в JavaScript демонстрирует код ниже?
function A() {}
A.prototype.shared = "value"
function B() {}
B.prototype = Object.create(A.prototype)
B.prototype.unique = "another"
const b = new B()-> Ручная цепочка прототипов
(другие варианты: Поверхностное наследование; Инкапсуляция на уровне объекта; Наследование свойств; Формальное клонирование;)
-
Как можно изменить прототип объекта в JavaScript?
-> С помощью Object.setPrototypeOf(obj, prototype)
(другие варианты: Прототип заменяется автоматически при вызове конструктора; только с помощью классов; Нужно вызвать prototype.override(); Прототип нельзя изменить после создания;) -
Что произойдёт при выполнении кода?
function createCounter() {
let count = 0
return {
increment() {
count++
return count
},
}
}
const counter = createCounter()
console.log(counter.increment())-> Метод increment использует замыкание для доступа к count и увеличивает его;
(другие варианты: Каждый вызов increment возвращает 1, потому что count пересоздаётся и увеличивается на 1 каждый раз; Создаётся глобальная переменная count вместе с методом increment в counter, который увеличивает count; Функция createCounter ничего не возвращает; count становится недоступным после первой итерации;)
-
Почему стрелочную функцию нельзя использовать в качестве конструктора (с оператором new)?
-> У неё нет `[[Construct]]`, и она не создаёт собственный объект this;
(другие варианты: Она не поддерживает ключевое слово new; Она наследует прототип родителя; Она всегда возвращает undefined; Она не принимает аргументы;) -
Какое из следующих выражений будет равно false?
-> 4 = '4'
(другие варианты: ‘a’ < ‘z’; 5+2>3; true ! false; 10>2) -
Когда уместно использовать setTimeout?
->Когда нужно искусственно сдвинуть выполнение функции во времени внутри основной очереди;
(другие варианты: Когда вызываемая функция формирует результат на основе внешнего флага; Когда нужно отреагировать на пользовательское событие и сохранить данные; Когда логика построена вокруг итеративных преобразований массива; Когда структура подразумевает несколько циклов с предсказуемым временем выполнения;) -
Что выведет выражение?
let count = 5
count = ++count + 6
console.log(count)->12
-
Что произойдёт с исходным объектом, если его передать в функцию и внутри этой функции изменить одно из его свойств?
->Исходный объект тоже изменится, потому что объект передаётся по ссылке; -
Функция объявлена внутри тела цикла for через let fn = () => …; Что происходит с переменной fn после завершения цикла?
->Если функция объявлена внутри тела цикла с помощью let, то переменная fn имеет блочную область видимости; -
Какое из утверждений неверно?
- Строку можно изменить (мутировать)
- Тип null — это “object”
- undefined используется, когда значение не задано
->Строку можно изменить (мутировать)