Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
// Простая функция сложения двух чисел, которая принимает на вход 2 параметра
function sum(a, b) {
return a + b;
}
Insert cell
Insert cell
sub = function (a, b) {
return a - b;
}
Insert cell
Insert cell
mult = (a, b) => {
return a * b;
}
Insert cell
Insert cell
divide = new Function('a', 'b', 'return a / b');
Insert cell
Insert cell
// Вызвали функцию один раз с параметрами 2 и 2
sum(2, 2);
Insert cell
// Вызвали ту же самую функцию ещё раз с параметрами 3 и 3
sum(3, 3);
Insert cell
Insert cell
typeof sum;
Insert cell
Insert cell
{
sum.description = "Adds two numbers";
return sum.description;
}
Insert cell
Insert cell
Insert cell
// Определим простую функцию, которая принимает один параметр и качестве результата возвращает этот параметр умноженный на 2
function multiplyByTwo(a) {
return a * 2;
}
Insert cell
// и создадим простой массив
arr = [1, 2, 3]
Insert cell
// Не забываем, что метод map() создаёт новый массив, а не изменяет старый!
arr.map(multiplyByTwo)
Insert cell
Insert cell
arr.map(function (elem) {
return elem * 2;
}) // такой же результат
Insert cell
Insert cell
Insert cell
arr.map((elem) => elem * 2) // Точно такой же результат
Insert cell
Insert cell
Insert cell
Insert cell
{
const group = {
title: "ICS-71B",
students: ["Suvorov", "Kovalenko", "Tyurin"],
result: [],
createResult() {
this.students.forEach(function(student) {
// TypeError: undefined is not an object (evaluating 'this.result')
this.result.push(this.title + ': ' + student);
});
}
};
group.createResult();
return group.result;
}
Insert cell
Insert cell
{
const group = {
title: "ICS-71B",
students: ["Suvorov", "Kovalenko", "Tyurin"],
result: [],
createResult() {
this.students.forEach((student) => {
// Всё хорошо, произошла лексическая привязка к this!
this.result.push(this.title + ': ' + student);
});
}
};
group.createResult();
return group.result;
}
Insert cell
Insert cell
Insert cell
{
// Корзина покупателя
const cart = {
items: [],
color: 'grey',
}

// Функция добавления товара в корзину
function addItemToCart(item) {
this.items.push(item);
}

// TypeError: undefined is not an object (evaluating 'this.items')
// addItemToCart('milk');

// Добавим функцию addItemToCart как свойство объекта cart
cart.addItemToCart = addItemToCart;
// И вызовем метод объекта
cart.addItemToCart('milk');
cart.addItemToCart('spaghetti');
return cart.items
}
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
{
// Объект с полями возраста и цели на жизнь, а также методом "взросления"
const Ivan = {
age:15,
goal: "Graduate from BMSTU",

// Метод "взросления"
growUp(newGoal) {
this.age++;
this.goal = newGoal;
}
}

// Объект, у которого есть только возраст и цель, но нет метода "взросления"
const Nikita = {
age: 20,
goal: "Work at Roscosmos",
}

Ivan.age; // 15
Ivan.growUp("Become Intel software engineer"); // У Вани день рождения! Увеличим его возраст и зададим новую цель.
Ivan.age; // 16

Nikita.age; // 20
// TypeError: Nikita.growUp is not a function. (In 'Nikita.growUp()', 'Nikita.growUp' is undefined)
// Nikita.growUp();
// У Никиты нет метода "взросления"!

// Что же делать? Воспользуемся методом call()!
// Вызовем метод call у функции growUp и привяжем значение this к объекту Nikita
Ivan.growUp.call(Nikita, "Become Avito Golang Developer");
return Nikita; // Никита повзрослел и задал новую цель на жизнь!
}
Insert cell
Insert cell
Insert cell
Insert cell
{
let user = {
firstName: "Vasya"
};
function func() {
return this.firstName;
}

// Внимание! Мы только создали функцию, но не вызывали её!
let funcUser = func.bind(user);
// Вызов новой функции
return funcUser();
}
Insert cell
function mul(a, b) {
return a * b;
}
Insert cell
Insert cell
{
// Воспользуемся bind, чтобы создать функцию double на её основе:
const double = mul.bind(null, 2);

return [
double(3), // = mul(2, 3) = 6
double(4), // = mul(2, 4) = 8
double(5), // = mul(2, 5) = 10
]
}
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
{
function curry(f) { // curry(f) - функция высшего порядка, выолняющая каррирование
return function(a) { // curry(f) возвращает функцию, принимающую один аргмуент
return function(b) { // которая возвращает функцию, принимающую один аргмуент
return f(a, b); // которая... возвращает результат вызова исходной функции с двумя переданным в анонимные функции параметрами!
};
};
}

function sum(a, b) {
return a + b;
}

// Создали новую функцию на основе функции суммы, принимающей 2 значения
let curriedSum = curry(sum);
return curriedSum(1)(2); // То же, что и sum(1, 2)
}
Insert cell
Insert cell
Insert cell
{
function addBase(base){
return function(num) {
return base + num;
}
}

const addTwo = addBase(2);
return [
addTwo(2),
addTwo(3),
addTwo(4),
]
}
Insert cell
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more