-
- Какие существуют?
- В чем их отличие?
- Где какие применять?
- Нейминг переменных?
- var и свойства глобального объекта?
-
- Сколько их?
- Как называются?
- Какие из них примитивные?
- Объекты-обертки для примитивов?
- Чем отличаются непримитивные?
- Преобразование(приведение) типов данных?
- HINT'ы объекта
-
- Какие есть (логические и арифметические)?
- Чем отличаются декремент от инкремента?
-
- Какие есть?
- Возможные синтаксические конструкции?
- continue & break ?
-
- Отличия и сходства Expression, Declaration, Arrow, new Function?
- Все о return?
- Параметры по умолчанию?
- Декомпозиция пропсов?
- Конструкторы и new?
- new.target?
- Контекст выполнения (execution context).?
- (...args) остаточные параметры и arguments?
- Отличия Array.from от оператора spread [...]?
- () => {} и arguments?
- (...someprops) –– оператор расширения?
- immediately-invoked function expressions (IIFE) ?
- Контекстное имя (.name) ?
- length ?
- Named Function Expression (NFE) ?
- new Function([arg1, arg2, ...argN], functionBody)
- Что передавать в body?
- Что записывается в [[Environment]] для таких ф-й?
- Функции-декораторы(обертки)?
- func.call(context, arg1, arg2, ...)?
- func.call(context, ...arguments)?
- func.apply(context, arguments)?
- «Перенаправление вызова» (call forwarding)?
- Заимствование метода –– [].join.call(arguments) ?
- func.bind(context, [arg1], [arg2], ...) ?
- console.log(f.bind(obj))?
- Фиксация привязки контекста ?
-
- LexicalEnvironment:
- Что это?
- У чего оно есть?
- Свойство [[Environment]]?
- Каково LexicalEnvironment в начале выполнения скрипта?
- для переменных
- для FunctionDeclaration
- Внешнее и внутреннее?
- Environment Record?
- Ссылка на внешнее лексическое окружение? (outer)
- Ссылка на внешнее окружение у глобального LexicalEnvironment?
- Блоки кода и циклы ?
- LexicalEnvironment:
-
- Как можно создать?
- Если хочется создать свойство с 2-мя словами: "длина хобота" , что делать?
- Как проверить существование свойства? (Все варианты)
- Зарезервированные слова?
- Порядок свойств в объекте?
- Копирование по ссылке?
- Копирование объектов? (Все варианты)
- Глубокое клонирование?
- Итерируемые объекты (Symbol.iterator)?
- Псевдомассивы?
- Object.entries/values/keys/fromEntries?
- Как сделать односторонний Связный Список?
- Как сделать двусторонний Связный Список?
- Дескриторы:
- Какие флаги есть?
- Как получить?
- Как изменить?
- Особенности оверрайтинга встроенных функций?
- Как работает присваивание с дескрипторами?
- Свойства-аксессоры (get, set):
- delete?
- defineProperty?
- свойства с _?
-
- Что это?
- Принцип достижимости?
- Алгоритм сборки мусора mark-and-sweep?
- В замыканиях?
-
- Что это?
- Зачем нужны?
- Преобразование в другие типы?
- Перебор свойств?
- Копирование объектов, содержащие Symbol поля?
- Глобальные символы?
-
- Reference type?
- Стрелочные функции?
- В модулях?
-
- Краткое представление больших чисел?
- Округление?
- Внутреннее представление?
- Перечисли все методы
-
- Трюк с indexOf и побитовым НЕ ?
- Перечисли все методы
- Symbol.iterator?
- Array.from?
- spread operator?
- "Суррогатная пара" -- смайлик, "красивенькая буковка"?
-
- Методы массива и их "О Большое"?
- Внутренняя оптимизация массива?
- Отличие for..in от for..of?
- length?
- toString?
- Проверка на массив?
- thisArg?
- Array.from?
- Все способы конвертировать псевдомассив в массив (5)? https://habr.com/ru/post/336136/
-
- Отличие от объекта?
- Методы?
- Хранение ключей?
- Порядок вставки и чтения элементов?
- объект <-> Map (преобразование)?
- WeakMap?
-
- Отличие от объекта?
- Методы?
- WeakSet?
-
- В массиве?
- В объекте?
- В пропсах?
- В пропсах если не передан пропс?
-
- timestamp?
- timestamp для Date.parse?
- С чего начинается отсчет в getDay() ?
- Автоисправление даты: что делает JS когда в Date передаешь 32 число месяца?
- Что такое Бенчмарки?
-
- Краткая история создания?
- JSON.stringify(value, [replacer, space]) ?
- replacer:
- Что в него можно передавать?
- Первый вызов функции – что в него передается?
- spacer:
- Что в него можно передавать?
- Что передать в replacer, если не хотим фильтровать, а только указать кол-во пробелов?
- JSON.parse(str, [reviver])?
- Какие типы данных поддерживает, а какие пропускает?
- Циклические ссылки?
- toJSON?
- Комментарии?
-
- Разогрев перед использованием функций-бенчмарок?
- Максимальная глубина рекурсии?
-
- globalThis?
- Что такое полифил?
-
- Свойство [[Prototype]]?
- proto?
- Чему может быть равен proto?
- for..in / Object.keys?
- Производительность поиска унаследованных свойств?
- Как работает prototype для функций new?
- F.prototype.constructor и f.constructor ?
- Как изменить prototype, не удалив наследование от текущей функции?
- Как клонировать объект вместе с дескриторами?
-
- Синтаксис?
- Класс – разновидность функции?
- Прототипный конструктор?
- Где находятся методы в классе, по аналогии с функциями?
- [[FunctionKind]]: "classConstructor" ?
- Можно ли вызвать без new?
- Enumerable методов класса?
- Class Expression?
- Class в return'e?
- Геттеры / Сеттеры?
- Свойства и методы в prototype?
- Наследование?
- После extends разрешены любые выражения?
- Переопределение и вызов родительских методов в дочерних?
- super и () => {}?
- Особенность создания классов-потомков и super?
- Наследующий класс и [[ConstructorKind]]: "derived"?
- Зацикленное выполнение функции родителя в объекте с --proto-- с вызовом из дочерней?
- Устройство super, [[HomeObject]]?
- Привязка метода к объекту из-за [[HomeObject]]?
- ПМетоды, а не свойства-функции в объекте и [[HomeObject]]?
- Статические методы?
- Статические свойства?
- Чему аналогична статика?
- Приватные поля # ?
- Symbol.species ?
- instanceof ?
- Symbol.hasInstance ?
- Symbol.toStringTag ?
- Object.assign и примеси для классов ?
-
- Ошибка парсинга?
- Асинхронность?
- Свойства объекта ошибки?
- Catch без переменной?
- throw?
- Проброс ошибки?
- finally?
- finally и return?
-
- Что это?
- Внутренние свойства?
- Можно ли изменять состояние промиса дважды и более?
- Что рекомендуется класть в reject()?
- then, catch, finally(отличия от остальных)?
- Thenable объекты/классы?
- Невидимый try..catch вокруг промиса?
- Какие ошибки обрабатывает catch?
- Методы Promise?
- Полифил для allSettled?
- Микрозадачи?
- Макрозадачи?
- Async / Await?
- что возвращает ф-я с async?
- что делает await с интерпретатором?
- Обработка ошибок?
- await c for..of?
-
- Что это?
- Синтаксис?
- Зачем?
-
- Что это?
- Синтаксис?
- Зачем?
- Исполнение скрипта модуля?
- This?
- Точка с запятой после класса/функции?
-
- Что это?
- Синтаксис?
- Зачем?
- disconnect?
-
- Что это Proxy?
- Синтаксис Proxy?
- Зачем?
- Ловушка get(target, prop, receiver)?
- Ловушка set(target, prop, value, receiver)?
- Инварианты для ловушек?
- Список ловушек
[[Get]] get чтение свойства [[Set]] set запись свойства [[HasProperty]] has оператор in [[Delete]] deleteProperty оператор delete [[Call]] apply вызов функции [[Construct]] construct оператор new [[GetPrototypeOf]] getPrototypeOf Object.getPrototypeOf [[SetPrototypeOf]] setPrototypeOf Object.setPrototypeOf [[IsExtensible]] isExtensible Object.isExtensible [[PreventExtensions]] preventExtensions Object.preventExtensions [[DefineOwnProperty]] defineProperty Object.defineProperty, Object.defineProperties [[GetOwnProperty]] getOwnPropertyDescriptor Object.getOwnPropertyDescriptor, for..in, Object.keys/values/entries [[OwnPropertyKeys]] ownKeys Object.getOwnPropertyNames, Object.getOwnPropertySymbols, for..in, Object.keys/values/entries - Reflect + правильный контекст + receiver
- Ограничения: Proxy и внутренние слоты Map, Set, Date, Promise, #field?
- Решение: Reflect.get(...arguments)
- Прокси != оригинальный объект
- Прокси и ===
- let {proxy, revoke} = Proxy.revocable(object, {})
-
- setTimeout(func | code, [delay], [arg1], [arg2], ...) ?
- setInterval(func | code, [delay], [arg1], [arg2], ...) ?
- timerId и отмена?
- Что можно передать вместо функции ?
- Минимальная задержка вложенных таймеров в браузере?
- По каким причинам таймер может замедлятся?
-
- Синтаксис ?
- Флаги i, g, (m, s, u, y) ?
- str.match ?
- str.replace ?
- result[i], result.length, result.index, result.input ?
- Что вернется если нет совпадения ?
- regexp.test(str) ?
- Символьные классы:
- \d
- \s
- \w
- . – если без флага "s", то не видит "\n"
- Обратные символьные классы:
- \D
- \S
- \W - не буквы из латиницы, не знак подчёркивания и не цифра. В частности, русские буквы принадлежат этому классу.
- Юникодные свойства; в каких браузерах не работают пока что?
- \p{Letter}
- \p{Hex_Digit}
- \p{sc=Cyrillic}
- \p{Currency_Symbol} или \p{Sc}
- Якоря "^" и "$"
- Якоря в многострочном режиме?
- Граница слова \b ?
- Экранированние символа \ ?
- new RegExp и \ ?
- Наборы [abc] ?
- Диапазоны [a-z] ?
- Исключающие диапазоны [^a-z] ?
- Квантификаторы +, *, ? и {n} ?
- Жадный режим(по умолчанию) и Ленивый "?"
- Скобочная группа
- Содержимое скобок в match если нет флага "g"
- Именованные группы
- Скобочные группы при замене
- Исключение из запоминания через "?:"
- Альтернация (или) |
- Опережающая проверка X(?=Y)
- Негативная опережающая проверка X(?!Y)
- Ретроспективная проверка
- (?<=Y)X
- Негативная (?
- Поиск на заданной позиции, флаг "y" и regexp.lastIndex
-
- Что такое:
- event loop
- call stack
- callback queue( macrotask queue)
- microtask queue
- heap
- runtime
- concurrency
- render queue
- ?
- Что такое:
-
- Что это?
-
- eval()
- Мутабельность данных и иммутабельность
- Call stack - структура данных которая хранит инфу о том где мы сейчас в программе находимся
- Размер Call stack 2^14 (16384). После переполнения очищается
- Первая функция call stack - main() и она анонимная
- WebAPI(C++API для бекенд) - по сути потоки
- Когда какой-то WebAPI заканчивает работу, он помещает callback в callback queue
- Если call stack пуст, то event loop добавляет в него все задачи Microtask queue и одну очередную задачу из macrotask queue
- setTimeout(cb, 0) - здесь ноль не равен нулю, а 4.7 миллисекундам
- Алгоритм
- requestAnimationFrame (safari - пидорас и ставит rAF последним)
- Style calculation
- Layout calculation
- Block painting (отрисовка пикселей)
- Контекст выполнения (execution context).
- Специальная внутренняя структура данных, которая содержит информацию о вызове функции. Она включает в себя конкретное место в коде, на котором находится интерпретатор, локальные переменные функции, значение this (мы не используем его в данном примере) и прочую служебную информацию.
- Один вызов функции имеет ровно один контекст выполнения, связанный с ним.
-
Когда функция производит вложенный вызов, происходит следующее:
- Выполнение текущей функции приостанавливается.
- Контекст выполнения, связанный с ней, запоминается в специальной структуре данных – стеке контекстов выполнения.
- Выполняются вложенные вызовы, для каждого из которых создаётся свой контекст выполнения.
- После их завершения старый контекст достаётся из стека, и выполнение внешней функции возобновляется с того места, где она была остановлена.
-
Замыкание – это функция, которая запоминает свои внешние переменные и может получить к ним доступ.
В некоторых языках это невозможно, или функция должна быть написана специальным образом, чтобы получилось
замыкание. Но, как было описано выше, в JavaScript, все функции изначально являются замыканиями
(есть только одно исключение, про которое будет рассказано в Синтаксис "new Function").
То есть, они автоматически запоминают, где были созданы, с помощью скрытого свойства [[Environment]] и все они могут получить доступ к внешним переменным.
Когда на собеседовании фронтенд-разработчик получает вопрос: «что такое замыкание?», – правильным ответом будет определение замыкания и объяснения того факта, что все функции в JavaScript являются замыканиями, и, может быть, несколько слов о технических деталях: свойстве [[Environment]] и о том, как работает лексическое окружение. - Чистая функция – На фундаментальном уровне, любая функция, которая не изменяет входные данные, не зависит от внешнего состояния (базы данных, DOM или глобальной переменной) и возвращает один и тот же результат для одинаковых входных данных является чистой функцией.
- Когда JS изменяет порядок вызова функций
- Spy
- Delay
- Debounce
- Throttling
- Carrying (https://learn.javascript.ru/currying-partials)
- Фишера-Йетса
- Число сочетаний
- Решето Эратосфена для простых чисел
-
- S
- O
- L
- I
- D
-
- Container & Presentational components method
- Callback render