Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal, estou estudando JavaScript pelo livro JavaScript Eloquent. Estou confuso com o funcionamento desse codigo:
Link do capitulo do livro: https://github.com/braziljs/eloquente-javascript/blob/master/chapters/05-funcoes-de-ordem-superior.md
A parte é sobre funções de ordem superior.
E você pode ter funções que alteram outras funções.
function noisy(f) {
return function(arg) {
console.log("calling with", arg);
var val = f(arg);
console.log("called with", arg, "- got", val);
return val;
};
}
noisy(Boolean)(0);
// → calling with 0
// → called with 0 - got false
Eu entendo até bem o que está acontecendo, mas o que não entendo é como esse parâmetro "0" chega até a função noisy. Pelo que estou vendo ele é apenas um numero entre parênteses. Não sabia que valores isolados como esses poderiam ser passados como função. Sempre pensei que o certo seria: noisy(Boolean, 0);
E que função f(arg) seria essa que nem declarada esta? Vou continuar analisando ela para ver se consigo entender. Desde já obrigado pessoal.Ah, no caso de f(arg); "que não esta sendo declarada em nenhum lugar"
O que acontece, é que esta sendo passado Boolean, que é um objeto que recebe um parametro, para a função noisy.
Então f(arg) equivale a Boolean(0);
Veja esses exemplos:
var matricula = 0;
console.log(Boolean(matricula)); // retornara false
var matricula = 1234;
console.log(Boolean(matricula)); // retornara true
var nome = false;
var sobrenome = new Boolean(false);
console.log(typeof nome); // retornara um boolean
console.log(typeof sobrenome); // retornara um objectMuito bom! Desculpa a demora pra responder é que não tive muito tempo pra entrar aqui. Você explicou muito bem!
Keven, joia!
Vejamos esse exemplo:
function apresentacao(forum)
{
// Agora "linguagem" é uma função, devido o retorno da função anonima
linguagem('JavaScript');
/**
Exibira:
Estamos em: Imasters
Falando de: JavaScript!
*/
Mas como temos o encadeamento, podemos executar as duas funções na sequencia:
apresentacao('Imasters')('JavaScript');
/**
Exibira:
Estamos em: Imasters
Falando de: JavaScript!
*/