JavaScript — это однопоточный неблокирующий асинхронный язык. Он работает асинхронно.

Пример:

console.log("Hello World!")
setTimeOut(() => {
console.log("I am Emon")
}, 1000)
console.log("A web developer")
// Output is: 
Hello World 
A web developer
I am Emon

# Примитивные значения в JavaScript:

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

console.log(5);
console.log('hello world');
console.log(null);
console.log(undefine);

# ОПП в javaScript:

OPP означает объектно-ориентированное программирование. Это называется синтаксический сахар.

class Person{
  constructor(firstName, lastName){
    this.firstName = firstName;
    this.lastName  = lastName;
  }
  
  getFullName() {
    return this.firstName + " " + this.lastName;
  }
}
const person1 = new Person('Emon' , 'Hossain');
console.log(person1)
// output is : Person {firstName: "Emon", lastName: "Hossain"};

Знакомство с ES6

ECMAScript 2015 или ES2015 — это значительное обновление языка программирования JavaScript. Это первое крупное обновление языка после ES5, который был стандартизирован в 2009 году. Поэтому ES2015 часто называют ES6.

Блочные привязки

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

Объявления Var и поднятие

Объявления переменных с использованием var обрабатываются так, как будто они находятся в верхней части функции (или в глобальной области видимости, если они объявлены вне функции) независимо от того, где происходит фактическое объявление; это называется подъем. Пример-

function getName(condition) {
    if (condition) {
       var name;
       // other code
        name= "Emon";
        return name;
    } else {
       // name doesn’t exist here
       return null;
    }
     // name doesn’t exist here
}

в примере переменная объявляется внутри условия if. так что переменная имени недоступна в условии else и вне условия.

function getName(condition) {

    var name;

    if (condition) {
        name= "Emon";

        // other code

        return name;
    } else {

        return null;
    }
}

Объявление переменной имени поднимается вверх. Это означает, что имя переменной доступно из условия else. При доступе оттуда переменная будет просто иметь значение undefine, потому что она не была инициализирована.

Объявления блочного уровня

Объявления на уровне блока означают, что переменная объявления недоступна за пределами области блока. Создаются области блока:

  1. Внутри функции
  2. Внутри блока (обозначается символами { и })

Пусть декларации

Синтаксис объявления let и var одинаков. Вы можете использовать let вместо объявления var. И если вы сделаете это, вы должны помнить, что область действия переменной останется в текущем блоке, потому что var поднимается вверху функции, а let не поднимается.

Пример-

function getName(condition) {
if (condition) {
let name;
        // other code
        name= "Emon";
        return name;
    } else {
       // name doesn’t exist here
       return null;
    }
     // name doesn’t exist here
}

Константные объявления

Если мы объявили переменную с помощью переменной const, мы не можем изменить это значение. Значение является постоянным.

const age = 20;
maxItems = 21 ; // throws error

В примере возраст не меняется, потому что это постоянное значение.

Связывание блоков в циклах:

В JavaScript чаще всего разработчики хотят, чтобы область видимости переменных на уровне блоков находилась внутри циклов for. Для этого мы должны использовать let, а не var, потому что var поднимается. Следуйте двум приведенным ниже примерам:

for (var i=0; i < 10; i++) {
    process(items[i]);
}
// i is still accessible here
console.log(i);                     // 10

Здесь, вне цикла, я доступен, потому что мы используем var

for (let i=0; i < 10; i++) {
    process(items[i]);
}
// i is not accessible here - throws an error
console.log(i);