Bem-vindo e nesta lição, vamos falar sobre funções de ordem superior do JavaScript. E tudo isso é construído, é a ideia de que o JavaScript trata as funções como objetos. Então, em alguns lugares, por exemplo, onde você está acostumado a usar variáveis, você também pode usar funções. O que significa que podemos passar uma função como parâmetro para outro e obter uma função como valor de retorno. Portanto, as funções são membros de primeira classe do JavaScript. Portanto, podemos armazená-los em variáveis, mesmo se quisermos. Portanto, funções de ordem superior também tomar uma função como argumento ou retornar uma função. E esta é uma página com a qual vamos trabalhar e vamos preencher isso à medida que avançamos. A boa notícia é que você provavelmente já fez um pouco disso. Por exemplo, vamos ver, eu tenho um monte de meus botões aqui, funcAsArg. Portanto, funcione como um argumento. Se eu quiser criar um manipulador de eventos para isso, Vou usar a função on do jQuery e o parâmetro que leva é o nome do evento e adivinhe, uma função. Então, pode ser o nome de uma função que já está lá fora, pode ser um anônimo que criamos pode ser a função de seta, que também é anônima. Se você já fez isso e estou supondo que em JavaScript em algum momento, você fez isso de alguma forma. Adivinha? Você já está usando funções de ordem superior, nada mal. Então, com o clique, vamos apenas mostrar algo em HTML. Não há nada de maravilhoso neste código aqui mas meio que queria apontar o que pode ser que você tenha usado com bastante frequência mas talvez nunca soubesse para que você o estava usando ou por que funcionou. Agora, vamos olhar para uma função que retorna uma função e como podemos estruturar isso. Digamos que vou trocar os sinais em um número. Agora, isso seria uma operação relativamente fácil para fazer, é claro, mas estamos criando este exemplo para que possamos mostrar funções de ordem superior. Então, talvez, em vez de apenas retornar uma variável, vamos retornar uma função. E vamos pegar esse valor original e fazer algo com isso. Sim, esta pode ser uma função independente, mas, novamente, estamos apenas demonstrando funcionalidade aqui. Então, quando eu chamar essa função, vou obter outra função de volta. Então, como fazemos isso funcionar? Bem, eu vou dizer tipo, não pense demais. Estamos acostumados com funções que retornam uma variável e simplesmente armazenamos esses dados em algum lugar. Bem, esta é uma função isso vai retornar outra função a ideia é que podemos fazer algo com ele. Então, digamos, por exemplo, faremos duas maneiras diferentes de chamá-lo aqui. Existem sinais de mudança e o argumento de direção conforme necessário. Vou armazenar a função que é retornada em forMomAndDad e em forTheBooks. Então, a partir de agora, eu realmente não tenho nada onde a mágica acontece é quando eu pego essas variáveis e passo o que precisa. Portanto, esta é a função que ele retorna aquela função interna, aviso tem um parâmetro de valor original. Isso é o que estou realmente passando neste ponto. Agora observe aqui, minha direção é positiva para MamãeAndDad deixe-o no, para os livros. Não que estejamos fazendo algo desonesto, mas queremos que a mãe e o pai pensem que estamos bem. Que tal isso? Então, vamos testar essa função como um valor de retorno. Mamãe e papai veem 500, a contabilidade vê a coisa real. Não minta para sua conta, não é uma boa ideia. E vamos verificar aqui e vamos inserir algo, aqui vamos nós. E sabemos que aquele anterior também funcionou. Portanto, temos uma função que assume um valor função que retorna outra função que acabamos ligando mais tarde. Outra coisa que podemos fazer é usar funções Javascript que já estão lá fora de ordem superior e o filtro é um deles. O que vou fazer é digitar uma ou mais letras aqui. E vamos encontrar qual das opções na caixa que realmente corresponde lá. Então, vamos configurar primeiro e vou apenas levar cada uma das minhas opções na caixa e vou criar uma matriz de cidade e, em seguida, basta enviar todo o texto desse na matriz da cidade que veremos mais tarde. Esse vai ser o lugar onde digitamos a letra ou letras e então nossa função de filtro ficará assim. Então, isso é apenas filtrar e é de ordem superior porque leva uma função como argumento. Nesse caso, é uma função anônima. Estamos olhando para essa palavra, Eu realmente não preciso do console que registra lá mas vamos ver se o personagem combina, porque se obtivermos um valor maior que zero, então sabemos que aquele personagem foi encontrado nessa corda em algum lugar e então vamos apenas exibi-lo na página. Então, estamos apenas mostrando quantas partidas houve e anexando-o à página. A grande vantagem desse aqui é que estou usando um filtro. É uma função de ordem superior porque leva essa função como um argumento. Então, vamos dizer que tal a letra a que parece aparecer em alguns deles. Lá vamos nós, temos oito partidas. Que tal "at" como uma frase? Apenas uma correspondência. Tente aquele, de novo, apenas aquele que combina aqui. Então você tem algumas funções que você pode usar para trabalhar com matrizes, filtro, sendo um deles que vamos passar por cada membro de um array e dada uma certa função, dizer se é parte dessa função booleana que você pediu para olhar primeiro. Também podemos fazer Reduce que é outra função de ordem superior e terei as opções novamente. Com este, o que vou fazer é pegar todos os comprimentos de cada uma das opções da caixa e Reduzir, assume uma função que me retorna um resultado. Então, está reduzindo essa matriz a um valor e você pode fazer o que quiser lá. Vou passar no total e atual. E isso vai ser apenas uma soma corrente isso vai me dar o comprimento de todos os personagens da caixa. Portanto, novamente, Reduce usa uma função como argumento. O segundo é apenas o que o padrão é quando é iniciado. Devo ser capaz de somar tudo isso junto e parece que talvez eu tenha muitos colchetes aí. Então, vamos consertar isso. Aqui vamos nós. O total de caracteres e todos os elementos de opção são 78. Você pode contá-los você mesmo e ver mas acho que funciona. Então, nesta lição, nós olhamos para uma introdução para usar funções de ordem superior em JavaScript. E obrigado por assistir. Em nossa próxima lição, falaremos sobre funções JavaScript que são chamados de iteradores e geradores.