Что такое функции высшего порядка (Higher Order Functions)?
Функция высшего порядка — это функция, возвращающая другую функцию или принимающая другую функцию в качестве аргумента.
Предположим, у нас имеется массив чисел, и мы хотим создать новый массив, который содержит результаты умножения этих чисел на 2. Рассмотрим способы решения этой задачи с использованием функций высшего порядка и без них.
Решение задачи без использования функций высшего порядка:
Функция высшего порядка — это функция, возвращающая другую функцию или принимающая другую функцию в качестве аргумента.
Предположим, у нас имеется массив чисел, и мы хотим создать новый массив, который содержит результаты умножения этих чисел на 2. Рассмотрим способы решения этой задачи с использованием функций высшего порядка и без них.
Решение задачи без использования функций высшего порядка:
const arr1 = [1, 2, 3];Решение задачи с помощью функции высшего порядка map:
const arr2 = [];
for(let i = 0; i < arr1.length; i++) {
arr2.push(arr1[i] * 2);
}
// выводит [ 2, 4, 6 ]
console.log(arr2);
const arr1 = [1, 2, 3];
const arr2 = arr1.map(function(item) {
return item * 2;
});
console.log(arr2);Почему функции в JS называют объектами первого класса (First-class Objects)?
Функции называют объектами первого класса, потому что они обрабатываются также, как и любое другое значение в JS. Они могут присваиваться переменным, быть свойством объекта (методом), элементом массива, аргументом другой функции, значением, возвращаемым функцией. Единственным отличием функции от любого другого значения в JS является то, что функция может быть выполнена или вызвана.
Функции называют объектами первого класса, потому что они обрабатываются также, как и любое другое значение в JS. Они могут присваиваться переменным, быть свойством объекта (методом), элементом массива, аргументом другой функции, значением, возвращаемым функцией. Единственным отличием функции от любого другого значения в JS является то, что функция может быть выполнена или вызвана.
/* функция не имеет имени и находится в правой части команды присваивания переменной.*/
var dog = function(num) {
for (var i = 0; i < num; i++) {
alert("Woof");
}
};
dog(3); //Эту функцию можно вызвать через переменную dog.Макконнелл "Совершенный код"
Более 10 лет первое издание этой книги считалось одним из лучших практических руководств по программированию. Сейчас эта книга полностью обновлена с учетом современных тенденций и технологий и дополнена сотнями новых примеров, иллюстрирующих искусство и науку программирования. Опираясь на академические исследования, с одной стороны, и практический опыт коммерческих разработок ПО - с другой, автор синтезировал из самых эффективных методик и наиболее эффективных принципов ясное прагматичное руководство. Каков бы ни был ваш профессиональный уровень, с какими бы средствами разработками вы ни работали, какова бы ни была сложность вашего проекта, в этой книге вы найдете нужную информацию, она заставит вас размышлять и поможет создать совершенный код.
Более 10 лет первое издание этой книги считалось одним из лучших практических руководств по программированию. Сейчас эта книга полностью обновлена с учетом современных тенденций и технологий и дополнена сотнями новых примеров, иллюстрирующих искусство и науку программирования. Опираясь на академические исследования, с одной стороны, и практический опыт коммерческих разработок ПО - с другой, автор синтезировал из самых эффективных методик и наиболее эффективных принципов ясное прагматичное руководство. Каков бы ни был ваш профессиональный уровень, с какими бы средствами разработками вы ни работали, какова бы ни была сложность вашего проекта, в этой книге вы найдете нужную информацию, она заставит вас размышлять и поможет создать совершенный код.
Сумма двух массивов
Напишите функцию, которая принимает два массива и возвращает сумму из чисел этих массивов.
Особенность этой задачи в том, что прежде чем складывать массивы, нужно составить число из элементов массива.
Например [3,2,9] будет равно числу 329.
Примеры:
Напишите функцию, которая принимает два массива и возвращает сумму из чисел этих массивов.
Особенность этой задачи в том, что прежде чем складывать массивы, нужно составить число из элементов массива.
Например [3,2,9] будет равно числу 329.
Примеры:
[3,2,9],[1,2] --> [3,4,1]
[4,7,3],[1,2,3] --> [5,9,6]
[1],[5,7,6] --> [5,7,7]
Также, первый элемент массива может быть отрицательным: [3,2,6,6],[-7,2,2,8] --> [-3,9,6,2] # 3266 + (-7228) = -3962Разработка требований к программному обеспечению
Эта книга — подробное руководство по разработке качественных требований к программному обеспечению. Здесь описаны десятки проверенных на практике приемов выявления, формулирования, разработки, проверки, утверждения и тестирования требований, которые помогут разработчикам, менеджерам и маркетологам создать эффективное ПО. Настоящее издание дополнено новыми приемами, посвященными разработке требований в проектах гибкой разработки (agile).
Эта книга — подробное руководство по разработке качественных требований к программному обеспечению. Здесь описаны десятки проверенных на практике приемов выявления, формулирования, разработки, проверки, утверждения и тестирования требований, которые помогут разработчикам, менеджерам и маркетологам создать эффективное ПО. Настоящее издание дополнено новыми приемами, посвященными разработке требований в проектах гибкой разработки (agile).
Что нового привнес в JS стандарт ES6 или ECMAScript2015?
1. Стрелочные функции (Arrow Functions).
2. Классы (Classes).
3. Шаблонные строки (Template Strings).
4. Расширенные объектные литералы (Enhanced Object literals).
5. Деструктуризация (Object Destructuring).
6. Промисы (Promises).
7. Генераторы (Generators).
8. Модули (Modules).
9. Symbol.
10. Прокси (Proxies).
11. Множества (Sets).
12. Параметры по умолчанию.
13. Операторы rest и spread.
14. Блочная область видимости (ключевые слова «let» и «const»).
1. Стрелочные функции (Arrow Functions).
2. Классы (Classes).
3. Шаблонные строки (Template Strings).
4. Расширенные объектные литералы (Enhanced Object literals).
5. Деструктуризация (Object Destructuring).
6. Промисы (Promises).
7. Генераторы (Generators).
8. Модули (Modules).
9. Symbol.
10. Прокси (Proxies).
11. Множества (Sets).
12. Параметры по умолчанию.
13. Операторы rest и spread.
14. Блочная область видимости (ключевые слова «let» и «const»).
Что такое стрелочные функции (Arrow Functions)?
Стрелочные функции создаются быстрее и имеют более читаемый синтаксис, чем функциональные выражения. В стрелочных функциях опускается слово «function»:
На практике это означает, что они наследуют сущности this и arguments от родительской функции.
Стрелочные функции создаются быстрее и имеют более читаемый синтаксис, чем функциональные выражения. В стрелочных функциях опускается слово «function»:
// ES5
var getCurrentDate = function(){
return new Date()
}
// ES6
const getCurrentDate = () => new Date()
В стрелочной функции не обязательно использовать ключевое слово return, поскольку стрелочные функции неявно возвращают значения при условии, что мы возвращаем одно выражение или значение: // ES5
function greet(name){
return 'Hello ' + name + '!'
}
// ES6
const greet = (name) => `Hello ${name}`
const greet2 = name = > `Hello ${name}`
Мы также можем передавать параметры стрелочным функциям. Если мы передаем один параметр, его можно не оборачивать в круглые скобки: const getArgs = () => arguments
const getArgs2 = (...rest) => rest
В отличие от других функций, стрелочные функции не имеют собственного контекста выполнения.На практике это означает, что они наследуют сущности this и arguments от родительской функции.
function Person(){
this.age = 0;
setInterval(() => {
this.age++; // `this` указывает на объект Person
}, 1000);
}
Еще одна вещь, которую убрали в стрелочных функциях кроме this, это arguments. В обычных функциях мы можем вывести arguments и посмотреть, чему равны наши аргументы.const getTrack = function (artist, track) {
console.log(arguments);
return artist + ' ' + track;
}
console.log(getTrack('Artist', 'Track'));
В es6 это можно сделать с помощью оператора spread. Как аргумент функции он возвращает все оставшиеся аргументы. Если он указан один, то он вернет все аргументы, как раньше возвращала arguments. Выглядит это такconst getTrack = function (...args) {
console.log(args);
return args[0] + ' ' + args[1];
}Просили крутую работу и ЗП в 2021?
Skillbox подготовили для вас новогодний подарок
скидки до 60% на все курсы и профессии:
👨💻 Frontend-разработчик
👨💻 Fullstack-разработчик
👨💻 Веб-разработчик
Успей записаться 👇
Skillbox подготовили для вас новогодний подарок
скидки до 60% на все курсы и профессии:
👨💻 Frontend-разработчик
👨💻 Fullstack-разработчик
👨💻 Веб-разработчик
Успей записаться 👇
Какое CSS свойство задает расстояние между буквами в слове?
Anonymous Quiz
81%
letter-spacing
10%
word-spacing
4%
text-align
5%
white-space
Что такое классы (Classes)?
Классы — способ написания функций-конструкторов в JS.. В основе классов лежат те же прототипы и прототипное наследование:
Классы — способ написания функций-конструкторов в JS.. В основе классов лежат те же прототипы и прототипное наследование:
// ES5
function Person(firstName, lastName, age, address){
this.firstName = firstName
this.lastName = lastName
this.age = age
this.address = address
}
Person.self = function(){
return this
}
Person.prototype.toString = function(){
return '[object Person]'
}
Person.prototype.getFullName = function(){
return this.firstName + ' ' + this.lastName
}
// ES6
class Person{
constructor(firstName, lastName, age, address){
this.firstName = firstName
this.lastName = lastName
this.age = age
this.address = address
}
static self(){
return this
}
toString(){
return '[object Person]'
}
getFullName(){
return `${this.firstName} ${this.lastName}`
}
}