Executando verificação de segurança...
1

Dúvida sobre IIFE e Block Statement

Funções IIFE e Block Statement

Sou iniciante no mundo de JS e me deparei com algo:
Estudei funções IIFE e gostei de seu uso, porém eu li algumas páginas que diziam que o Block Statement faz a mesma coisa que o IIFE e que o mesmo agora não é mais necessário.

Problema e Dúvidas

Porém ao criar um código aqui, percebi que o Block Statement não encapsula minhas funções do escopo global (ou seja, eu consigo chamá-las no console do navegador). Enquanto isso, ao usar IIFE, não consigo acessar nada através do console (que é o meu objetivo). Então começou a surgir dúvidas em minha mente:

  • Ainda é "correto" usar IIFE? Se não, porquê não e como posso fazer para resolver a minha situação?
  • Block Statement literalmente faz a mesma coisa que IIFE ou há diferenças?
  • Há algum problema das funções serem globais, ou o real problema é quando apenas as variáveis que são do escopo global?

Obs.: Ao usar IIFE e Block, ambos os casos o código funcionou - estou mais preocupado com segurança e boas práticas

Agradeço quem puder me ajudar, pesquisei em vários lugares e não achei nada claro sobre o que queria.

Carregando publicação patrocinada...
1
1

Entendo, então entre o uso de IIFE e Block, devo usar (nesse caso) o que impede que funções e varíaveis não fiquem no escopo global. Logo, devo usar o IIFE, estou certo?

1

IIFE hoje é basicamente nem usada mais. Embora se usem para coisas simples!
Mas nem é preciso.

O motivo é termos módulos!
Cada módulo é único e separado do escopo global.
Então no lugar de usar uma IIFE se usa um módulo.

1

Olá Luiz.
No inicio quando tudo era feito com var e function, não existiam conceitos como class e module e o código js ficava "solto" dentro do arquivo, usava o IIFE para organizar o código e inicializar objetos sem que isso gerasse conflito com outras funções e variáveis. Em resumo criava um escopo para um conjunto de funções e variáveis. Hoje existem outras formas de contornar isso como trabalhar com class, modules, const e let.

Fiz um exemplo aqui https://onecompiler.com/javascript/3zs7qk79n para tentar exemplificar.

Você pergunta se é correto usar IIFE. Depende para o que vc está usando. Se for para organizar o código, talvez seja melhor trabalhar com modules e usar import e export (https://www.w3schools.com/js/js_modules.asp). A não ser que esteja tentando manter compatibilidade com navegadores muito antigos como o IE.

Block Statement cria um escopo para um bloco. IIFE declara e executa imediatamente uma função. O efeito é semelhante, mas o objetivo é diferente.

O problema de funções e variáveis globais é realmente o conflito. Se vc declara uma var nome em um arquivo js e em outro arquivo também declara var nome a segunda vai sobreescrever a primeira. A mesma coisa para funções.

1

Entendi agora, obrigado! Por conta de eu não ter visto ainda o conteúdo de classes e módulos, acredito que o vídeo que vi preferiu usar IIFE para não adiantar muito a matéria...