Функции в 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 | |
Ошибки |