Jump to content
keven1406

Não consigo entender esse código

Recommended Posts

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.

Share this post


Link to post
Share on other sites

Keven, joia!
 

Vejamos esse exemplo:
 

function apresentacao(forum)
{
    console.log("Estamos em: " + forum);
    return function(linguagem)
    {
        console.log("Falando de: " + linguagem + "!");
    }
}

apresentacao('Imasters')('JavaScript');

 

A principio, estamos chamando apenas  apresentacao('Imasters'); 
Só que ela nos retorna uma funcão anonima, e em javascript podemos fazer um encadeamento executando essa função na sequencia. Por exemplo:

 

var linguagem = apresentacao('Imasters'); 
// 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!
*/

 

  • +1 3

Share this post


Link to post
Share on other sites

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 object

 

  • +1 3

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By fideles
      Pessoal, tenho uma dúvida, talvez muito boba.
       
      Tenho um formulario com os input em array, e um alert javascript mostrando que foi registrado com suceso.
       
      O problema maior é que se for gravado 30 registro no banco de dados, ele mostra 30 alertas de registro gravado com suceso, por acaso é possivel limitar esse tanto de alerta para somente 1 independente da quantidade que ele grava no banco ?
    • By Erick Plant
      Olá! Precisando de uma ajudinha.
       
      FICAREI MUITO GRATO PELA AJUDA...SE PUDEREM ME DAR UMA LUZ!
       
      Estou arrumando um código que foi de outra pessoa, mas antes disso, preciso "apagar o incêndio" aqui e fazer funcionar uma implementação.
       
      Tenho um dropzone que carrega um arquivo sem necessidade de form. O problema começa por agora. Foi-me pedido para que eu implementasse um select trazendo do banco uma info e que enviasse via get 'junto com a url que envia as informaçoes do arquivo'.
      O carregador do select foi feito, eu estou pegando o value do select dinamicamente, pois não tem form.
      Porém, o problema é q nao sei como pegar esse value capturado para implentá-lo  na url via get.
       
       
      o js  e o dropzone na pag é esse:
      //AQUI EU PEGO O VALOR DO SELECT DE FORMA DINÂMICA id = ''; $(document).ready(function () { $("#seguimento").change(function () { id = $('#seguimento').val(); }); }); Dropzone.autoDiscover = false; Dropzone.options.tstDz = { //////////////////////////////////////////////////////// //AQUI O DROPZONE QUE PASSA OS PARAMETROS VIA GET /////////////////////////////////////////////////////// url: "<?= base_url('homeCgmrr/MonitoramentoPadraoDesempenho/addDoc?ambiente='.$ambiente.'&value='); ?>", paramName: "arquivo", maxFilesize: 2, acceptedFiles: ".xlsx,.ods,.xls,.csv", addRemoveLinks: true, // init: function () { // this.on("complete", function (file) { // setGallery(file); // }) // } init: function () { this.on('error', function(file, response) { $.notify("Você não pode fazer upload de arquivos com essa extensão, apenas arquivos .xlsx !", 'warning'); }); this.on('success', function(file, resp){ if(resp['status'] == false){ $.notify("Ocorreu erro no preenchimento da planilha. Por favor, verifique e tente novamente.", 'warning'); setGalleryError(file); }else{ setGallery(file); $.notify("Arquivo enviado com Sucesso!", 'success'); } }); } };  
      Como eu posso fazer pra carregar o id SE o base_url está em PHP?
      url: "<?= base_url('homeCgmrr/MonitoramentoPadraoDesempenho/addDoc?ambiente='.$ambiente.'&value='AQUI VAI O ID); ?>",  
      Obrigado pela ajuda!
       
    • By Elisame Araújo
      Bom dia,
       
      Estou montando um site de clã de jogos online (especificamente de Battlefield), e neste momento estou desenvolvendo o painel de administração do site, mas me deparei com uma dúvida que não consigo encontrar uma situação na internet que se aplique ao que eu preciso.
       
      A situação é a seguinte:
       
      Eu tenho um módulo onde o administrador vai adicionar um mapa, um tamanho de jogo e um modo para a rotação do servidor do clã, a exemplo desse pop-up:
       
      A lista de mapas vem do BD.
       
      O que eu preciso é que o segundo e o terceiro <select> sejam preenchidos baseados na seleção do primeiro. Onde, a exemplo:

       
      Seleção de Mapa: Ilhas Lofoten
      Opções Disponíveis a partir do 1º Select: 16 e 32 Jogadores
      Opções Disponíveis a partir do 1º e 2º Select: Dominação, TDM, etc.
       
      Para ficar mais simplificado: Seleção 1 > Opções A Partir de Seleção 1 > Opções A partir de Seleção 1 e 2
       
      Infelizmente eu ainda não tenho conhecimento em JavaScript ou JQuery ou JSON - ainda estou para aprender -, e não consigo encontrar uma resposta simplificada para isso
       
      Como eu poderia fazer isso da maneira mais simples ou didática?
       
    • By lezão
      Ola Galera.
      Boa tarde!
      Td bem com vcs?
      Tenho um codigo de script ele roda perfeitamente, mas ele possui um detalhezinho, o resultado é apresentado dentro de um input text.
      teria como algum me  ajudar em cima deste codigo a tirar o resultado do input e apresentar fora do input?
      <input type="checkbox" name="sabor" id="evento_value1" value="28.00"> <input type="checkbox" name="sabor" id="evento_value2" value="28.00"> <input type="text" size="5" id="evento_value" onclick="AddValor()" disabled="disabled"/> <script type="text/javascript"> var total = 0; //Chama a função com click em qualquer checkbox $(':checkbox').click(function() { //Atribui o valor do input p/ variável 'valor' var valor = parseInt($(this).val()); //Se o checkbox for marcado ele soma se não subtrai if ($(this).is(":checked")) { total += valor; } else { total -= valor; } //Atribui o valor ao input $("#evento_value").val(total); }); </script>  
    • By janir.matheus
      Bom dia, não tenho muita prática com JavaScript (tive contato apenas durante um período no CEDERJ). Ocorre que agora preciso do bendito, e não estou conseguindo sair de uma situação. Vou postar o código:
      <script language="JavaScript"> coordenadas = ""; //Defini essa variável segundo meus conhecimentos, por ter omitido a palavra 'var' ela é global function sucesso(posicao) { coordenadas = posicao.coords.latitude; //document.write(coordenadas); //Aqui dentro ela escreve o valor da latitude } if('geolocation' in navigator) { navigator.geolocation.getCurrentPosition(sucesso); } else { alert("Navegador incompatível com esse recurso"); } document.write(coordenadas); //Aqui eu NÃO consigo pegar o valor </script> Basicamente eu quero salvar os valores de Latitude, Longitude e Timestamp em variáveis para poder usa-las posteriormente. Conto com a vossa ajuda. 
      Obrigado.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.