JavaScript может возвращать функции?? ЧТО?
тлдр; Да, оно может
Пс. Это серия для решения плюс концепции для 30 дней JS LeetCode, и это 1/30, я добавлю ссылку на проблему в конце.
Функции в JavaScript также можно рассматривать как объекты или, как следует из терминологии JS.
Граждане первого класса
и, следовательно, мы можем передавать функции внутри других функций в качестве параметра, и мы также можем возвращать функцию как результат внутри другой функции, которая также является отдельной концепцией JS, которая называется
Закрытие
кроме того, вы наверняка заметили еще один кусок кода в решении
return function(...args) { return "Hello World" }
здесь, когда мы возвращаем функцию, и у нее нет имени!
ЧТО ЗА ФУНКЦИЯ БЕЗ ИМЕНИ??
A. Да, у вас могут быть функции без имени, но в определенных условиях, таких как IIFE или замыкания, а также в некоторых других местах, и такие функции в терминологии JS называются анонимными функциями.
И, следовательно, объединив концепцию Анонимной функции и Гражданина первого порядка, мы можем определить функцию в переменной, как мы это сделали в нашем коде.
var createHelloWorld = function() {}
И еще один второстепенный момент, но он может оказать большое влияние на решение проблем и понимание JS. Это оператор распространения (…), который был представлен фондом ECMAScript в версии JS ES6.
здесь в коде, когда мы возвращаем анонимную функцию, мы закодировали ее как
function(...args)
позже можно увидеть, что он преобразуется в массив, где вы можете получить доступ к N количеству переменных
Ex
function x(...args){ console.log(args) } x("s","s","sss"); // this outputs ["s","s","sss"]
Код
/** * @return {Function} */ var createHelloWorld = function() { return function(...args) { return "Hello World" } }; /** * const f = createHelloWorld(); * f(); // "Hello World" */
Заключение
Итак, вы видите, как много всего происходит в вашей странной функции, которая возвращает функцию, и именно так JS делает возможным использование нескольких концепций, которые мы использовали выше, каждая отдельная строка JS является новым открытием сама по себе 😂 но как Прошло 30 дней. Я постараюсь написать больше таких постов, разбивая код построчно и концепт за концептом!
Счастливых 30 дней JavaScript!
Проблема — https://leetcode.com/problems/create-hello-world-function/description/