Функции в JavaScript

Содержание
Введение
Пример
body.clientWidth: ширина страницы
Похожие статьи

Введение

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

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

Простым примером функции высшего порядка будет функция Map, которая принимает в качестве своих аргументов функцию и список и возвращает список после применения функции к каждому элементу списка. Чтобы язык программирования поддерживал Map, он должен поддерживать передачу функций как аргумента.

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

Пример

Создайте файл first-class.js

function square(x) { return x * x; } var f = square(5) console.log(square) console.log(f)

ƒ square() 25

Изменим код

function square(x) { return x * x; } var f = square console.log(square) console.log(f) console.log(f(5))

ƒ square() ƒ square() 25

Пример кастомной функции map()

function square(x) { return x * x; } function my_map(func, arg_list) { result = []; for(var i = 0; i < arg_list.length; i++){ result.push(func(arg_list[i])) } return result; } var squares = my_map(square, [1, 2, 3, 4, 5]) console.log(squares) function cube(x) { return x * x * x; } var cubes = my_map(cube, [1, 2, 3, 4, 5]) console.log(cubes)

(5) [1, 4, 9, 16, 25] 0:1 1:4 2:9 3:16 4:25 (5) [1, 8, 27, 64, 125] 0:1 1:8 2:27 3:64 4:125

Замыкания

Создайте файл closures.js

function html_tag(tag) { function wrap_text(msg) { console.log('<' + tag + '>' + msg + '</' + tag + '>') } return wrap_text } print_h1 = html_tag('h1') console.log(print_h1) print_h1('Test Headline!') print_h1('Another Headline!') print_p = html_tag('p') print_p('Test Paragraph!')

ƒ wrap_text() <h1>Test Headline!</h1> <h1>Another Headline!</h1> <p>Test Paragraph!</p>

Пояснения на примере print_h1:

print_h1 = html_tag('h1')

Заряжает функцию html_tag тегом h1

Теперь все , что будет передано в print_h1 это уже не tag, а msg, так как наружу уже торчит не html_tag а wrap_text

Это видно когда выполняется console.log(print_h1)

ƒ wrap_text()

и этот msg будет попадать именно во внутреннюю функцию wrap_text и оборачиваться тегом h1

Похожие статьи
JavaScript
Функции
typeof(): Определить тип переменной
Массивы
Сортировка массива
Скролл вверх и вниз
Определить ширину экрана
Mocha Framework
Запросы к REST API на JS
TicTacToe
Ошибки