Академический минимум js-разработчика: базовые концепции
Основы ООП (Объектно-Ориентированного Программирования)
class Vehicle {
constructor(name) {
this.name = name;
}
displayName() {
return this.name;
}
}
class Car extends Vehicle {
constructor(name, model) {
super(name);
this.model = model;
}
displayModel() {
return `Model: ${this.model}`;
}
}
let car = new Car('Toyota', 'Camry');
console.log(car.displayName() + ' ' + car.displayModel()); // Output: Toyota Model: Camry
class Person {
constructor(name, age) {
this._name = name;
this._age = age;
}
getName() {
return this._name;
}
setName(newName) {
this._name = newName;
}
getAge() {
return this._age;
}
}
let person = new Person('Alice', 30);
console.log(person.getName()); // Output: Alice
person.setName('Bob');
console.log(person.getName()); // Output: Bob
console.log(person.getAge()); // Output: 30
class Animal {
makeSound() {
return `The animal makes a generic sound.`;
}
}
class Dog extends Animal {
makeSound() {
return 'The dog barks.';
}
}
let dog = new Dog();
console.log(dog.makeSound()); // Output: The dog barks.
Чистый код
Алгоритмы и их сложность
Типы и структуры данных
Стек вызовов, callback-функции и асинхронность
Области видимости, IIFE, модули и пространства имен
Области видимости (Scope)
var globalVariable = 'I am global';
function printGlobal() {
console.log(globalVariable);
}
printGlobal(); // Output: I am global
function outerFunction() {
var localVariable = 'I am local';
function innerFunction() {
console.log(localVariable);
}
innerFunction(); // Output: I am local
}
var localVariable = 'I am out of function';
outerFunction(); // Output: I am local
Области видимости и замыкания (Closures)
function createCounter() {
var count = 0;
return function() {
return count++;
};
}
var counter1 = createCounter();
var counter2 = createCounter();
console.log(counter1()); // Output: 0
console.log(counter2()); // Output: 0
console.log(counter1()); // Output: 1
console.log(counter2()); // Output: 1
IIFE (Immediately Invoked Function Expression)
(function() {
var privateVariable = 10;
function privateFunction() {
console.log(privateVariable);
}
window.publicFunction = function() {
console.log(privateVariable);
privateFunction();
};
privateFunction();
})();
// publicFunction доступна для использования
publicFunction();
Модули
var module = require('module');
console.log(module);
import { example } from './example.js';
console.log(example);
Пространства имен (Namespaces)
var myNamespace = {
variable: 'Hello from namespace',
function: function() {
console.log(this.variable);
}
};
myNamespace.function(); // Output: Hello from namespace
Разница между оператором и выражением
Выражение: x = y + z
В этом выражении 2 оператора: Оператор сложения (+) и оператор присваивания (=).
Очередь сообщений и цикл событий
Рендеринг во всех ипостасях: DOM-дерево и дерево макетов в памяти, перекомпоновка/макеты, композиты и перерисовка
Прототипное наследование
Фабрики и классы
Map, reduce, filter и стрелочные функции
Рекурсия
Паттерны проектирования и чистая архитектура
Основные принципы программирования: интроспекция и рефлексия. Особенности рефлексии в JavaScript
Вывод: перечисленного хватит, чтобы стать настоящим разработчиком?