Первая часть статьи.

12. Побитовые операторы, массивы типов и буферы массивов

Технически для компьютера все сводится к 1 и 0. Он не оперирует цифрами, символами или строками, а использует только двоичные цифры (биты). Краткая версия этого объяснения заключается в том, что все хранится в двоичной форме. Компьютер использует такие способы кодировки, как UTF-8, чтобы преобразовать сохраненные комбинации битов в символы, цифры или различные знаки (версия ELI5).

13. DOM и деревья макетов

Объектная модель документа, обычно называемая DOM (document object model), является неотъемлемой частью интерактивности сайтов. Она представляет собой интерфейс, позволяющий языку программирования манипулировать содержимым, структурой и стилем сайта. JavaScript — язык подготовки скриптов на стороне клиента, который подключается к DOM в браузере.

// Получение ссылок на необходимые элементы DOM
const commentsListElement = document.getElementById('commentsList');
const postCommentButton = document.getElementById('postComment');

// Прикрепление слушателя событий к кнопке "Post Comment"
postCommentButton.addEventListener('click', function() {
// Создание нового элемента комментария
const comment = document.createElement('li');
comment.textContent = 'New comment';

// Добавление нового комментария в список комментариев
commentsListElement.appendChild(comment);
});

14. Фабрики и классы

JavaScript предлагает два основных подхода к созданию объектов: фабрики и классы. Фабрики — функции, которые генерируют и возвращают объекты, в то время как классы обеспечивают более структурированный и объектно-ориентированный макет.

// Фабрика
function createPerson(name, age) {
return {
name,
age,
greet() {
console.log(`Hello, my name is ${this.name}.`);
},
};
}
// Класс
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
greet() {
console.log(`Hello, my name is ${this.name}.`);
}
}
const person1 = createPerson("John", 25);
const person2 = new Person("Alice", 30);
person1.greet();
person2.greet();

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

15. Ключевое слово this и методы call, apply, bind

Методы callapply и bind используются в JavaScript для управления значением ключевого слова this в функции. Они обеспечивают гибкость в определении контекста, в котором должна выполняться функция.

const person = {
name: "John",
greet(message) {
console.log(`${message}, ${this.name}!`);
}
};
const anotherPerson = {
name: "Alice",
};
// call
person.greet.call(anotherPerson, "Hello");
// apply
person.greet.apply(anotherPerson, ["Hi"]);
// bind
const greetAlice = person.greet.bind(anotherPerson, "Hey");
greetAlice();

Эти методы особенно полезны в сценариях, требующих явного установления значения this при вызове функции.

16. Операторы new и instanceof, функция-конструктор и экземпляры

У каждого объекта JavaScript есть прототип (prototype). Все объекты в JavaScript наследуют методы и свойства от своих прототипов. 

17. Наследование на основе прототипов и цепочка прототипов

В JavaScript используется наследование (inheritance) на основе прототипов, когда объекты могут наследовать свойства и методы от других объектов через цепочку прототипов (Prototype Chain).

// Прототип
function Animal(name) {
this.name = name;
}
Animal.prototype.sound = function () {
console.log("Some generic sound");
};
// Наследование
function Dog(name, breed) {
Animal.call(this, name);
this.breed = breed;
}
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;
Dog.prototype.sound = function () {
console.log("Bark!");
};
const myDog = new Dog("Buddy", "Labrador");
myDog.sound(); // Bark!

Понимание наследования на основе прототипов имеет решающее значение для создания эффективных и многократно используемых структур кода в JavaScript.

18. Object.create и Object.assign

Object.create — один из методов создания нового объекта в JavaScript, тогда как метод object.assign позволяет объединять объекты, копируя свойства из одного объекта в другой. 

19. Методы map, reduce и filter

Даже не зная, что такое функциональное программирование, вы наверняка использовали методы map, filter и reduce просто потому, что они невероятно полезны и делают код более чистым, позволяя прописывать более ясную логику. 

20. Чистые функции, побочные эффекты, мутация состояний и распространение событий

Множество ошибок коренится в коде, связанном с IO (input-output — вводом/выводом), мутацией данных и побочными эффектами. Они появляются по всей кодовой базе — при приеме пользовательского ввода, получении неожиданного ответа через http-вызов или записи в файловую систему. К сожалению, это суровая реальность, которую необходимо принять. Или нет?

21. Замыкания

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

function outerFunction() {
let outerVar = "I’m from outside!";
function innerFunction() {
console.log(outerVar);
}
return innerFunction;
}
const closureExample = outerFunction();
closureExample(); // Вывод: I'm from outside!

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

22. Функции высшего порядка

Это функции, которые либо принимают другие функции в качестве аргументов, либо возвращают функции. Они способствуют развитию более функционального стиля программирования, повышая уровень читаемости и сопровождаемости кода.

const numbers = [1, 2, 3, 4, 5];
// Map - Применяет функцию к каждому элементу массива
const squared = numbers.map((num) => num * num);
// Filter - Создает новый массив с элементами, удовлетворяющими условию
const evenNumbers = numbers.filter((num) => num % 2 === 0);
// Reduce - Сокращает массив до одного значения
const sum = numbers.reduce((acc, num) => acc + num, 0);
console.log(squared); // [1, 4, 9, 16, 25]
console.log(evenNumbers); // [2, 4]
console.log(sum); // 15

Функции высшего порядка обеспечивают лаконичный и выразительный код для работы с массивами и преобразованиями данных.

Читайте также:

Читайте нас в Telegram, VK и Дзен


Перевод статьи Codingwinner: 33 Concepts Every JavaScript Developer Should Know

Предыдущая статьяПродвинутый поиск Meilisearch для приложения Golang