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

One platform to build and deploy the best data apps

Experiment and prototype by building visualizations in live JavaScript notebooks. Collaborate with your team and decide which concepts to build out.
Use Observable Framework to build data apps locally. Use data loaders to build in any language or library, including Python, SQL, and R.
Seamlessly deploy to Observable. Test before you ship, use automatic deploy-on-commit, and ensure your projects are always up-to-date.
Learn more