Podemos fazer alguma coisa como isso no JavaScript:
function falar(palavra) {Se executarmos nosso código vamos receber a saída impressa no console Oi JavaScript!. Você pode testar este exemplo utilizando seu prompt de comando. O Node.JS é um ambiente de execução para usar o JavaScript fora do navegador também! Você pode acessar digitando o comando node no seu console e inicia o console interativo (REPL), como no exemplo:
console.log(palavra);
}
function executar(funcao, valor) {
funcao(valor);
}
executar(falar, "Oi JavaScript!");
![]() |
| Exemplo rodado no terminal do Ubuntu 12.04 |
E o que são estes undefined no console? Para cada comando dado no console do Node na linha seguinte é impresso o valor retornado (return) deste comando. Vamos analisar com calma: o primeiro comando foi definir a função falar, após a definição retornou undefined, o segundo comando foi definir a função executar, que também retornou undefined, o terceiro comando que executou a função executar, que executou a função falar contida na variável funcao, que acabou por executar a função console.log que imprime no console uma string, mas a função chamada (executar) em si não tem nenhum valor de retorno, então retornou undefined.
Nós podemos passar uma função como parâmetro para outra função usando seu nome, como foi visto no exemplo. Após entender este conceito veremos no exemplo a seguir que esta é a maneira indireta de se fazer isso, nós não precisamos definir a função para depois passar ela como parâmetro, nós podemos definir e passar a função como parâmetro para outra função no mesmo lugar.
function executar(funcao, valor) {Neste exemplo nós definimos a função que nós queremos passar para executar no lugar onde a função espera receber seu primeiro parâmetro. Aqui nós não precisamos nem dar um nome à função passada, por isso esta função é chamada de função anônima.
funcao(valor);
}
executar( function(palavra) { console.log(palavra) }, "Oi JavaScript!");
![]() |
| Exemplo de função anônima no Node.JS |


Funções como objectos (first-class ou high-order functions) não são uma "peculiaridade" do Javascript, mas uma das características da programação funcional, originária do LISP, e também existente em Ruby, Python, Scala, Haskell, Erlang, F#, e até Perl, C, C# e Java (8+). Faltou um pouco de embasamento de JS no artigo.
ResponderExcluirO blog aqui é para desenvolvedores de node.js ou iniciantes brincando com jQuery?
Obrigado pelo comentário, mesmo de forma anônima com certeza seu comentário vai contribuir para esclarecer ainda mais o Post. Quando escrevi peculiaridade do JavaScript era pra ter escrito peculiaridade da programação funcional. Eu realmente não quis entrar em conceitos como first-class ou high-order functions, mas editar o post para ser mais claro.
ExcluirAgradeço pelo sr. Anonymous, e sinta-se a vontade para identificar-se a próxima vez que quiser contribuir com este singelo projeto.
Nossa eu não estava entendendo isso, agora ficou claro. É um conceito simples mas pra quem não tem muita prática se torna um pouco difícil.
ResponderExcluirParabéns!
Legal. e o nodo é todo baseado nisso, Passando funções callback como parametros de chamadas de eventos.
ResponderExcluir