Dev (Back & Front)ARTIGO

Utilizando a propriedade callee do Javascript

Hoje vou mostrar uma propriedade interessante do JavascriptJavaScript116 conteúdosJavaScript em 2020: O que esperarDev (Back & Front) · jan 2020Campos públicos e privados em classes JavaScript – O que vem por aí no ESNextDev (Back & Front) · abr 201929 anos de JavaScript!Dev (Back & Front) · jan 2025Ver tudo em Dev (Back & Front) , chamada callee, que tem uma finalidade bastante útil quando trabalhamos com funções anônimas.

A propriedade callee, que está contida na propriedade arguments, pode ser chamada de dentro de qualquer função, pois ela é herdada do objeto Global. Para chamar a ela mesma novamente, ou seja, ela é útil quando precisamos utilizar recursividade, mas com a vantagem de não se precisar conhecer previamente o nome da função, com isso podemos nos beneficiar do uso de funções anônimas.

Como exemplo, vou mostrar uma função que retorna a soma de todos os números de 1 a 2000, onde 2000 será o parâmetro passado à função para uma função que chama uma função onde o seu retorno é uma recorrência recursiva, que obedece à regra de que um determinado valor X tem como resultado de soma de todos os valores de um a X, o valor da soma de X com X-1  com X-2 .. 1. E, sabendo-se disso, podemos ver que para o resultado de X-1 acontece o mesmo; logo, podemos encurtar isso em uma recursão do tipo: resultado = se x>1 x+soma(x-1) senão, 1.

Assim, segue um código xhtml com esse exemplo sendo executado:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"><br /> <head><br />  <script type="text/javascript"><br />    function retornaSoma() {<br />        //essa função poderia fazer outras coisas além de retornar o valor<br />        alert('Ola mundo! \nFiquem tranquilos, essa mensagem não aparecera denovo...');<br />           return function(x) {<br />                    if (x <= 1)<br />                      return 1;<br />                    return x + arguments.callee(x - 1);<br />           };<br />    }<br />    function exemploFuncaoCallee(x){<br />       alert( "A soma de de todos os números de 1 a 2000 é "+ retornaSoma()(x) ); <br />    }<br /> </script><br /></head><br /><body><br />   <input type="button" value="Pressione para chamar a função" onclick="exemploFuncaoCallee(2000)" /><br /></body><br /></html>

Basta ver que arguments.callee é chamada passando um parâmetro novamente para ela, que avalia o seu valor até chegar em 1 onde chega em seu parâmetro de parada. Essa função é muito útil para quando queremos criar uma função bem específica, que só é necessária nesse escopo e nunca mais, como no caso acima. Claro que esse exemplo é bem simples, até mesmo porque para se saber a soma de todos os valores de determinada faixa de valores poderíamos utilizar apenas a fórmula return (X1+X2)*((X2-X1 +1) / 2 ). Onde x2 é o limite superior e x1 é o limite inferior. Nesse caso a recursão está apenas servindo como um exemplo simples, apenas para esclarecer.

É desenvolvedor web há mais de 8 anos, foi representante da Fatec Zona Sul na maratona brasileira de programação por dois anos consecutivos. Atualmente estuda Matemática Aplicada no IME-USP Focado em algoritmos, estrutura de dados e desenvolvimento web em geral. Possui certificações em Java: SCJP (OCJP) e SCJA (OCJA) e em HTML5/Javascript/CSS MCSD 70-480. Atualmente é Analista de Sistemas em grandes projetosno portal UOL.

Ver perfil