JavaScript Topics Flashcards
Understanding Object.is
Object.is метод, который был добавлен в спецификации ES6. В js нет строгой типизации переменных и параметров, поэтому два значения на равенства рекомендуется проверять через оператор эквивалентности ===. Однако, если бы мы сравнивали два NaN === NaN или +0 === -0, то он бы вернул бы нам false и true. А вот с помощью Object.is, который сравнивает является ли два значения одинаковыми по условию, например both undefined или both null, соотвественно:
console.log(Object.is(+0 , -0)); //false
console.log(Object.is(NaN, NaN)); //true
Differences between let, var, and const
- let и const имеют блочную видимость, а не функции (functional scope)
- Повторное объявление var - мы можем дважды назвать переменную в разных частях кода одним именем и компилятор не будет ругаться
- для var интерпретатор в JavaScript присваивает переменным значение undefined по умолчанию во время обьявления. А для let Reference Error. const нужно сразу инициализировать, иначе это приведет к ошибке SyntexError
Temporal Dead Zone
Временная мертвая зона (TDZ) – это поведение, введенное в ES6, которое проявляется при попытке обратиться к переменной до ее объявления. Другими словами, во время TDZ переменные существуют, но до их объявления нельзя получить к ним доступ или присвоить им значения.
Hoisting
Поднятие или hoisting — это механизм в JavaScript, в котором переменные и объявления функций, передвигаются вверх своей области видимости перед тем, как код будет выполнен.
Polyfills
Самописный кусок кода для поддержки относительно новых методов в старых версиях браузеров. Реализация собственного полифила обеспечивает единообразное поведение функциональности в разных браузерах.
Differences and uses of arrow functions, function expressions, and function declarations.
- Стрелочные функции не имеют своего контекста this , поэтому они сохраняют текущий контекст, в котором были созданы.
- Стрелочные функции не могут быть вызваны с new, например для создания обьектов
- Стрелочные не имеют arguments
- У стрелочных функций есть неявный return при определенных условиях.
- Function Declaration – функция, объявленная в основном потоке кода.
- Function Expression – объявление функции в контексте какого-либо выражения, например присваивания. Основное отличие между ними: функции, объявленные как Function Declaration, создаются интерпретатором до выполнения кода.
- В строгом режиме, когда Function Declaration находится в блоке {…}, функция доступна везде внутри блока. Но не снаружи него.
- Function Expression – условное обьявление в if
Global scope vs. functional scope.
Функциональная область видимости — это область видимости в пределах тела функции. Можно сказать, что она ограничена { и } функции.
Global scope: The default scope for all code running in script mode.
Module scope: The scope for code running in module mode.
https://developer.mozilla.org/en-US/docs/Glossary/Scope
Глобальная область видимости является самой внешней областью. Она доступна для любой внутренней или локальной области видимости. В браузере глобальной является область видимости, создаваемая при загрузке JavaScript-файла, указанного в атрибуте src тега script.
Defining function parameters
Параметр – это переменная, указанная в круглых скобках в объявлении функции.
Аргумент – это значение, которое передаётся функции при её вызове.
Differences in parameters passing by value and by reference.
Строки, числа, логические значения передаются в функцию по значению. Иными словами при передаче значения в функцию, эта функция получает копию данного значения. Объекты и массивы представляют ссылочные типы. То есть переменная или константы, которая представляет объект или массив, по сути хранит ссылку или иными словами указатель, которые указывают на адрес в памяти, где хранится объект.
Handling a dynamic amount of function parameters.
- В JavaScript любая функция может быть вызвана с произвольным количеством аргументов.Если функция вызвана с меньшим количеством аргументов, чем указано, то отсутствующие аргументы считаются равными undefined.
- Мы можем использовать rest parameter
- список аргументов, с которыми вызвана функция, доступен через arguments
Understanding context and lexical environments.
Лексическое окружение – объект спецификации, Объект лексического окружения состоит из двух частей:
Environment Record – объект, в котором как свойства хранятся все локальные переменные (а также некоторая другая информация, такая как значение this).
Ссылка на внешнее лексическое окружение – то есть то, которое соответствует коду снаружи (снаружи от текущих фигурных скобок).
Контекст выполнения тоже является абстрактным механизмом спецификации, как и лексическое окружение, к которому невозможно напрямую обратиться или изменить из программы.
Контекст описывает окружение в котором выполняется код (любой код имеет контекст выполнения). В каждый момент времени только один контекст выполнения выполняет код. Контекстом еще часто называют значение переменной this внутри функции.
Замыкание – это функция, которая запоминает свои внешние переменные и может получить к ним доступ.
Differences between scope and context.
Область действия определяет доступность: Область действия определяет, где вы можете получить доступ к переменным в вашем коде. Это как граница вокруг определенной области.
Контекст определяет среду выполнения: Контекст относится к объекту, по отношению к которому выполняется функция. Это все равно, что спросить “кому принадлежит текущее действие?
The mechanism of lexical environment traversal.
1.При запуске скрипта лексическое окружение предварительно заполняется всеми объявленными переменными.
Изначально они находятся в состоянии «Uninitialized». Это особое внутреннее состояние, которое означает, что движок знает о переменной, но на нее нельзя ссылаться, пока она не будет объявлена с помощью let. Это почти то же самое, как если бы переменная не существовала.
2. Появляется определение переменной let phrase. У неё ещё нет присвоенного значения, поэтому присваивается undefined. С этого момента мы можем использовать переменную.
3. Переменной phrase присваивается значение.
4. Переменная phrase меняет значение.
Connection between function and its lexical environment.
Функция – это тоже значение, как и переменная.
Разница заключается в том, что Function Declaration мгновенно инициализируется полностью.
Когда создается лексическое окружение, Function Declaration сразу же становится функцией, готовой к использованию (в отличие от let, который до момента объявления не может быть использован).
Именно поэтому мы можем вызвать функцию, объявленную как Function Declaration, до самого её объявления. В процессе вызова функции у нас есть два лексических окружения: внутреннее (для вызываемой функции) и внешнее (глобальное): Когда код хочет получить доступ к переменной – сначала происходит поиск во внутреннем лексическом окружении, затем во внешнем, затем в следующем и так далее, до глобального.
Design Patterns
YAGNI
You Aren’t Gonna Need It / Вам это не понадобится
DRY
Don’t Repeat Yourself / Не повторяйтесь
Эта концепция была впервые сформулирована в книге Энди Ханта и Дэйва Томаса «Программист-прагматик: путь от подмастерья к мастеру».
Идея вращается вокруг единого источника правды (single source of truth — SSOT).