Skip to content

Aplicação de Funções JavaScript – Parte 01

Quando comecei a aprender não apenas JavaScript, mas programação, sempre tive uma dúvida acerca de funções. Portanto, vamos começar com a seguinte pergunta:

Funções são invocadas, chamadas ou aplicadas?
R: Depende!

Se estivermos falando sobre JavaScript ou algumas outras linguagens funcionais, as funções são descritas como aplicadas. No JS fazemos isso usando o método apply() do protótipo porque uma função em JS nada mais é do que um objeto com métodos.

Mas… Qual a diferença entre chamar, invocar e aplicar uma função?

Vejamos o seguinte exemplo:

const ola = nome => `Olá, ${ nome }!`;

//Invocando função
ola('JavaScript'); //Saída -> Olá, JavaScript!

//Aplicando função
ola.apply(null, ['JS']); //Saída -> Olá, JS!

Se você ainda não conhece os métodos call() e apply(), neste artigo mostro seu funcionamento e suas diferenças.

Aplicando ou invocando a função acima, o resultado é o mesmo. Isso se dá porque o método apply() faz com que o primeiro argumento fique relacionado ao this da função e transforma o segundo argumento, um array de strings, no objeto arguments da função. Como no nosso exemplo o primeiro argumento é null, o this referenciará o objeto global, ou seja, assume o mesmo comportamento de quando chamamos uma função que não é um método de um determinado objeto.

Vamos para mais um exemplo:

const pessoa = {
    ola: nome => `Olá, ${ nome }!`
} 
//Invocando...
pessoa.ola('função');   //Saída -> Olá, função!

//Aplicando...
ola.apply(pessoa, ['aplicação']);  //Saída -> Olá, aplicação!

Diferente do primeiro exemplo, quando o método de um objeto é uma função, o próprio objeto (pessoa) é passado como primeiro argumento e com isso o this agora referencia o objeto pessoa

Utilizando o método call()

Além do método apply(), o protótipo da função possui também o método call() e pode ser utilizado em situações onde a função aceita apenas um argumento e com isso damos uma “economizada” no trabalho de criar um array de apenas um elemento conforme podemos ver abaixo:

 ola.apply(pessoa, ['JS']);
 ola.call(pessoa, 'JS');

Bom, por hoje é só! Até a próxima!

Published inArtigosJavaScript