--- title: Função First-class slug: Glossario/Funcao-First-class translation_of: Glossary/First-class_Function ---
Entede-se que uma linguagem de programação tem Função First-class quando suas funções são tratadas como qualquer outra variável. Por exemplo, numa linguagem desse tipo, a função pode ser passada como argumento pra outras funções, ser retornada por outra função e pode ser atribuída como um valor à uma variável.
const foo = function() { console.log("foobar"); } // Chamar a função usando a variável foo();
Nós atribuímos uma Função Anônima
à uma Variável
, então usamos a variável pra chamar a função adicionando parênteses ()
no fim.
Mesmo se sua função for nomeada, você pode usar o nome da variável pra chamá-la. Nomeá-la será útil quando for debugar seu código. Mas não afetará a maneira que à chamamos.
function sayHello() { return "Hello, "; } function greeting(helloMessage, name) { console.log(helloMessage() + name); } // Passar `sayHello` como um argumento pra função `greeting` greeting(sayHello, "JavaScript!");
Nós estamos passando a função sayHello()
como um argumento pra função greeting()
, isso explica como estamos tratando a função como um valor
.
A função que passamos como um argumento pra outra função, chamou uma Função Callback. sayHello
é uma Função Callback.
function sayHello() { return function() { console.log("Hello!"); } }
Neste exemplo; Precisamos retornar uma função de outra função - Podemos retornar uma função porque tratamos função em JavaScript como um valor
.
Uma função que retorna uma função é chamada de Higher-Order Function
De volta ao nosso exemplo; Agora, precisamos chamar a função sayHello
e a Função anônima
retornada. Existem duas maneiras para fazermos isso:
const sayHello = function() { return function() { console.log("Hello!"); } } const myFunc = sayHello(); myFunc();
Dessa maneira, ela retorna a mensagem Hello!
.
Você tem que usar outra variável. Se você fosse chamar sayHello
diretamente, ela retornaria a função em si sem chamar a função retornada.
function sayHello() { return function() { console.log("Hello!"); } } sayHello()();
Estamos usando parênteses duplo ()()
pra chamar também a função retornada.