Что такое правда и ложь?

В 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 выполняет все операции в одном потоке, но с использованием нескольких интеллектуальных структур данных создает иллюзию многопоточности.

стек вызовов.стек вызовов отвечает за отслеживание всех операций в очереди, которые должны быть выполнены. Всякий раз, когда функция завершается, она извлекается из стека.

очередь: очередь событий отвечает за отправку новых функций в дорожку для обработки. Она следует структуре данных очереди, чтобы поддерживать правильную последовательность, в которой все операции должны быть отправлены на выполнение.