(https://hh.ru/applicant/skills/674/verification_methods?rank=2&kind=theory)
-
Как можно узнать, какой именно элемент был нажат в рамках делегирования события на родителе?
-> с помощью event.target
(другие варианты: Через window.event.srcElement; Только через выбор селектора вручную; по this внутри обработчика; через event.currentTarget;) -
Вам нужно реализовать систему локализации интерфейса. Для каждой строки интерфейса должно быть несколько переводов на разные языки. Необходимые функциональности:
- Хранение переводов на русском, английском и других языках
- Быстрое получение перевода по ключу и языку
- Возможность обновлять и добавлять новые переводы
-> Создать объект, где ключи - это языки, а значение - объект с ключами-строками и значениями-переводами
(другие варианты: Использовать массив, где каждый элемент - это пара “ключ-строка, перевод”; Хранить всё в одной огромной JSON-строке и регулярно её парсить; Делать глобальную переменную для каждого языка и записывать переводы в виде: en_key: translation; Сформировать общий массив всех переводов и искать в нём по индексу;)
- Какую концепцию наследование в 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 имеет блочную область видимости; -
Какое из выражений является неверным?
- Cтроку можно изменять
- Тип null является “object”
- undefiend используется когда значение не задано
->Строку можно изменять