Что такое правда и ложь?
В JavaScript истина — это выражение, результатом которого является логическое значение "истина", а ложь — логическое значение ложь.
Следующие значения всегда falsy:
- ложь
- 0(ноль)
- '' или "" (пустая строка)
- нуль
- не определено
- Нет
Все остальное правда.
Пример:
var value = 0; if (value) { console.log("I am truthy") } else { console.log("I am falsy") } //output: I am falsy
В чем разница между null и undefined?
null – это присвоенное значение. Это ничего не значит.
Вот пример. Мы присваиваем значение null a:
let a = null; console.log(a); //output: null
undefined означает, что переменная была объявлена, но еще не определена. Например:
let bird; console.log(bird); // output: undefined
Вы также можете явно установить переменную равной undefined:
let a = undefined; console.log(a); // output: undefined
при поиске несуществующих свойств в объекте вы получите undefined:
var student= {}; console.log(student.age); // output: undefined
В чем разница между «==» и «===» в JavaScript?
Двойное равенство проверяет только значения, а тройное равенство проверяет значения и типы.
Пример: «==»
const a = 2; const b = "2"; if (a == b) { console.log("true") } else{ console.log("false"); } //output: true
Пример: «===»
const a = 2; const b = "2"; if (a === b) { console.log("true") } else{ console.log("false"); } //output: false
Что такое область действия?
Область действия определяет видимость или доступность переменной или другого ресурса в области вашего кода.
В JavaScript есть два типа области видимости:
- Глобальный охват
- Локальная область
Общая область
Переменная, объявленная вне функции, становится ГЛОБАЛЬНОЙ. Глобальная переменная имеет глобальную область действия: все сценарии и функции на веб-странице могут получить к ней доступ.
//global scope
var bird = 'parrot'
console.log(bird); //parrot
function getBird(){
console.log(bird); //bird is accessible here
}
getBird(); //parrot
Местный охват
Переменные, объявленные в функции JavaScript, становятся ЛОКАЛЬНЫМИ для этой функции. Локальные переменные имеют область действия функции: к ним можно получить доступ только из функции.
//global scope
function foo1(){
//local scope 1
function foo2(){
//local scope 2
}
}
//global scope
function foo3(){
//local scope 3
}
//global scope
Локальный охват можно разделить на:
- область действия
- область блокировки
Концепция области блока представлена в ES6 вместе с новыми способами объявления переменных — const и let.
Область блокировки
Область блока — это область внутри условий if, switch или циклов for и while. Вообще говоря, всякий раз, когда вы видите {фигурные скобки}, это блок. В ES6 const и let ключевые слова позволяют разработчикам объявлять переменные в области блока, что означает, что эти переменные существуют только в соответствующем блоке.
function foo(){ if(true){ var fruit1 = 'mango'; //exist in function scope const fruit2 = 'apple'; //exist in block scope let fruit3 = 'banana'; //exist in block scope } console.log(fruit1); console.log(fruit2); console.log(fruit3); } foo(); //output: //mango //error: fruit2 is not defined //error: fruit3 is not defined
Лексическая область
Еще один момент, о котором следует упомянуть, — это лексический охват.
Лексическая область означает, что дочерняя область имеет доступ к переменным, определенным в родительской области. Дочерние функции лексически связаны с контекстом выполнения своих родителей.
function foo1(){ var fruit1 = 'mango'; const fruit2 = 'apple'; let fruit3 = 'banana'; function foo2(){ console.log(fruit1); console.log(fruit2); console.log(fruit3); } foo2(); } foo1(); //output: //mango //apple //banana
Что такое закрытие?
Если внутри функции есть другая функция, и если мы возвращаем или используем функцию внутри, это создает закрытую среду, и они сохраняют значение ссылки на внешнюю переменную, это называется закрытием.
function stopWatch(){ let count = 0; return function(){ count++; return count; } } const clock1 = stopWatch(); console.log(clock1()); console.log(clock1()); console.log(clock1()); console.log(clock1()); const clock2 = stopWatch(); console.log(clock2()); console.log(clock2()); //output: //1 //2 //3 //4 //1 //2
Инкапсуляция
Инкапсуляция означает сокрытие информации. Речь идет о том, чтобы скрыть как можно больше внутренних частей объекта и выставить минимальный общедоступный интерфейс.
Самый простой и элегантный способ создания инкапсуляции в JavaScript — использование замыканий. Закрытие может быть создано как функция с частным состоянием.
Частная переменная
Частные переменные объявляются с помощью ключевого слова «var» внутри объекта, и доступ к ним возможен только с помощью частных функций и привилегированных методов.
Цикл событий JavaScript, стек, очередь
Цикл событий.Цикл событий — это секрет асинхронного программирования JavaScript. JS выполняет все операции в одном потоке, но с использованием нескольких интеллектуальных структур данных создает иллюзию многопоточности.
стек вызовов.стек вызовов отвечает за отслеживание всех операций в очереди, которые должны быть выполнены. Всякий раз, когда функция завершается, она извлекается из стека.
очередь: очередь событий отвечает за отправку новых функций в дорожку для обработки. Она следует структуре данных очереди, чтобы поддерживать правильную последовательность, в которой все операции должны быть отправлены на выполнение.