Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

160
Visualizações
Usar una función privada dentro de un IIFE vinculado a un detector de eventos si IIFE no ha regresado

Estoy usando el patrón modular en JavaScript. Tengo tres IIFE en total:

  • El primero devuelve un objeto con una gran cantidad de métodos.
  • El segundo hace lo mismo.
  • El tercero llama a los métodos devueltos, controlando así la lógica de la aplicación.

Todos los métodos llamados dentro del tercer IIFE están vinculados a un detector de eventos cuando hace clic en cualquier parte del documento. Si el tercer IIFE se ejecuta pero no regresa, no se crea ningún cierre, lo que significa que el tercer IIFE se saca de la pila y se lleva consigo el objeto variable creado durante la fase de creación del contexto de ejecución.

El detector de eventos se guarda en la memoria que llama a todos los métodos de retorno del primer y segundo IIFE, ya que son métodos globales. Sin embargo, también vinculado al detector de eventos, hay una función privada que quiero ejecutar dentro del tercer IIFE. Si no se crea un cierre en el tercer IIFE, ¿cómo es que cuando ocurre el evento de clic en el documento, el detector de eventos reconoce la función privada en el tercer IIFE si el objeto variable sale de la pila con el tercer IIFE y ya no es como no? se creó el cierre?

El controlador IIFE no ha regresado, por lo que no se crea ningún cierre y, por lo tanto, el detector de eventos llama a una función que no está disponible actualmente ya que el tercer IIFE ha salido de la pila, ¿un detector de eventos lleva consigo un alcance de cuando se creó? Entiendo cómo se llaman los métodos de devolución, ya que todavía son globales, pero estoy confundido sobre cómo un detector de eventos llama a la función privada después de que finaliza el tercer IIFE.

Vea el código a continuación. El primer y segundo IIFE están ausentes y devuelven todos los métodos que he llamado en el detector de eventos. En lugar de aburrirlos a todos con mi código largo en el proyecto en el que estoy trabajando, lo he simplificado a continuación.

 var scoreController = (function() { var score = 0; return { updateScore: function() { score++ return score; } } })(); var UIcontroller = (function() { return { updateUI: function(value) { document.querySelector("#displayScore").textContent = value; } } })(); var controller = (function() { function setupEventListener() { document.addEventListener("click", updateGame); } setupEventListener(); function privateFunction() { console.log("how does this work if") } function updateGame() { var globalScore = scoreController.updateScore(); UIcontroller.updateUI(globalScore); privateFunction(); } })();
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

El controlador IIFE no ha regresado, por lo que no se crea ningún cierre.

Esta es una conclusión incorrecta. Cada función puede formar y forma un cierre, si se hace referencia a ella desde más allá del ámbito en el que se creó la función. No tiene que return desde el IIFE para eso; también podría pasarse a otra función, podría almacenarse en una variable global, o podría adjuntarse como un controlador de eventos al dom.

¿Un detector de eventos lleva consigo un alcance de cuando se creó?

Sí. Cada función lo hace. updateGame se cierra sobre la variable privateFunction (y también sobre UIcontroller en un ámbito superior).

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda