Fundamentals Flashcards
JavaScript language
Однопоточный
Мультипарадигменный
Интерпретируемый (для его запуска нужен интерпретатор), в отличии от компилируемых языков.
Single-threaded
One thread = one call stack = one thing at a time
Call stack
Основная очередь исполнения JS скрипта
Callback queue
Очередь приоритетов, туда попадают callback от setTimeout, например, и ожидают там заложенное время для выполнения вовремя.
Event loop
Цикл ивентов (бесконечный), которые вызываются в основном потоке call stack, если он пуст, после ожидания в callback queue и в момент наступления ивенты оттуда.
Ternary operator
Условный (тернарный) оператор - единственный оператор в JavaScript, принимающий три операнда: условие, за которым следует знак вопроса (?), затем выражение, которое выполняется, если условие истинно, сопровождается двоеточием (:), и, наконец, выражение, которое выполняется, если условие ложно.
При присвоении значения также возможно выполнение более одной операции. В этом случае переменной будет присвоено то значение, которое стоит последним в списке значений, разделённых запятой.
switch… case
switch (expression) {
case value1:
//Выполняются инструкции, если результат выражения value1
[break;]
case value2:
//Инструкции, соответствующие value2
[break;]
…
case valueN:
//Инструкции, соответствующие valueN
//statementsN
[break;]
default:
//Здесь находятся инструкции, которые выполняются при отсутствии соответствующего значения
//statements_def
[break;]
}
Допустимы цепочки case:
switch (Animal) {
case ‘Cow’:
case ‘Giraffe’:
case ‘Dog’:
case ‘Pig’:
console.log(‘This animal is not extinct.’);
break;
case ‘Dinosaur’:
default:
console.log(‘This animal is extinct.’);
}
Switch case - examples, where it can be useful
Switch используется если надо сравнить результат с конкретными данными и в зависимости от них что-то сделать.
Как пример - обработка ошибок и вывод в зависимости от получаемой ошибки того или иного сообщения для пользователя.
===
Оператор строгого равенства === проверяет равенство без приведения типов.
Другими словами, если a и b имеют разные типы, то проверка a === b немедленно возвращает false без попытки их преобразования.
var
Var-объявления могут обладать видимостью глобальной или локальной (область видимости в пределах функции).
Область видимости по существу своему указывает на то, где данные переменные доступны для использования.
var является глобальной, когда объявлена вне какой-либо функции. Это означает, что любая переменная, объявленная через var вне блока функции, доступна для использования во всем окне.
var является локальной, когда объявлена внутри функции. Это означает, что она доступна и к ней можно обращаться только изнутри этой функции.
Переменные var могут быть объявлены повторно или обновлены
Это значит, что мы можем сделать это внутри соответствующей области видимости и не получить ошибку.
var greeter = “hey hi”;
var greeter = “say Hello instead”;
var hoisting
Поднятие — механизм в JS, по которому переменные и объявления функций перемещаются в верхнюю часть своей области видимости, прежде чем начнется выполнение кода. Это означает, что если сделать вот так:
console.log (greeter);
var greeter = “say hello” …то это будет интерпретировано так:
var greeter;
console.log(greeter); // greeter is undefined
greeter = “say hello”
Минусы: всплытие может давать неожиданный результат, также переопределение может привести к тому, что программист обратится к переменной, которая уже сушествует и перезатрет ее значение.
let & const
let и const имеют блочную область видимости.
Блок — это фрагмент кода, ограниченный фигурными скобками {}. Всё, что находится внутри фигурных скобок, относится к блоку. Таким образом, переменная, объявленная в блоке через let, будет доступна только внутри этого блока.
let могут быть обновлены, но не объявлены повторно.
Точно так же, как и в случае с var, переменные, объявленные через let, можно обновлять внутри их области видимости. Но, в отличие от var, let-переменные нельзя повторно объявить внутри области видимости.
Однако, если переменная с одним и тем же именем определена в разных областях видимости, ошибки не будет.
А вот переменные const не могут быть ни обновлены, ни объявлены повторно.
let & const hoisting
Точно так же, как в случае с var, объявления через let и const перемещаются вверх. Но в отличие от var-переменных, которые инициализируются как undefined, let и const не инициализируется. Если использовать их до того, как они будут объявлены, то получите ошибку ReferenceError.
Temporal Dead Zone (TDZ)
Временная мертвая зона (TDZ) - это область блока, где переменная недоступна до тех пор, пока компьютер полностью не инициализирует ее значением.
Если обращаться к переменной из TDZ, то получим ReferenceError.
TDZ let и const заканчивается в момент инициализации переменной (присвоения ей значения).
TDZ var заканчивается в момент объявления переменной (присвоения значения undefined).
Hoisting
Всплытие дает более высокий приоритет объявлению переменных, классов и функций во время выполнения программы.
Оно осуществляет объявления компьютером перед любым другим кодом.
Примечание: хойстинг не означает, что JS переставляет или перемещает код друг над другом.
Всплытие просто придает более высокую специфичность объявлениям JS. Таким образом, это заставляет компьютер сначала читать и обрабатывать объявления, прежде чем анализировать любой другой код в программе.