O que significa que o namespace global seria poluído?
Eu realmente não entendo o que significa um namespace global ficar poluído.
javascript
theJava
fonte
fonte
Respostas:
Nota rápida sobre coleta de lixo
À medida que as variáveis perdem o escopo, elas se qualificam para a coleta de lixo. Se eles tiverem escopo global, eles não serão elegíveis para coleta até que o namespace global perca o escopo.
Aqui está um exemplo:
Adicionar isso ao seu namespace global (pelo menos para mim) deve adicionar 10.000 kb de uso de memória (win7 firefox), que não será coletado. Outros navegadores podem lidar com isso de forma diferente.
Considerando que ter o mesmo código em um escopo que sai do escopo como este:
Permitirá
arra
perder o escopo após a execução do fechamento e será elegível para a coleta de lixo.Namespace global é seu amigo
Apesar das muitas reclamações contra o uso do namespace global, ele é seu amigo. E como um bom amigo, você não deve abusar de seu relacionamento.
Seja gentil
Não abuse (geralmente referido como "poluente") do namespace global. E o que quero dizer com não abuse do namespace global é - não crie múltiplas variáveis globais. Aqui está um exemplo ruim de uso do namespace global.
Isso vai criar 11 variáveis globais que podem ser substituídas ou mal interpretadas em algum lugar.
Seja engenhoso
Uma abordagem mais engenhosa, que não polui o namespace global, seria envolver tudo isso no padrão do módulo e usar apenas uma variável global ao expor várias variáveis.
Aqui está um exemplo: (observe que isso é simples e não há tratamento de erros)
fonte
Calculate.prototype.Slope()
fora do escopo? Seria muito perfeito compreender outro conceito próximo a esta problemática!Em JavaScript, as declarações fora de uma função estão no escopo global. Considere este pequeno exemplo:
No exemplo acima,
x
é declarado no escopo global. Qualquer escopo filho, como aquele criado pelaexample
função, herda efetivamente coisas declaradas em qualquer escopo pai (neste caso, é apenas o escopo global).Qualquer escopo filho que declara novamente uma variável declarada no escopo global irá sombrear a variável global, potencialmente causando bugs indesejados e difíceis de rastrear:
Variáveis globais geralmente não são recomendadas devido ao potencial de causar problemas como este. Se não usássemos a
var
instrução dentro daexample
função, teríamos substituído acidentalmente o valor dex
no escopo global:Se você quiser ler mais e entendê-lo corretamente, sugiro passar pela especificação ECMAScript . Pode não ser a mais emocionante das leituras, mas não terá fim.
fonte
Quando você declara variáveis globais, funções, etc., elas, ehm, vão para o namespace global. Além de problemas de desempenho / memória (que podem surgir), é provável que você se depare com conflitos de nomes infelizes, quando redefinir uma variável importante ou não usar o valor que pensa usar.
Definir coisas no namespace global deve ser evitado.
fonte