Atualizado em 01/09/2015: Meu método original, keys(window) apresentou resultados inúteis em outros navegadores que não o Chrome. Atualizei esta publicação com um método mais confiável.


Os globais do JavaScript são considerados ruins. E como colaborador do projeto MooTools, ouvi isso diariamente por quase uma década. O MooTools foi criticado por estender os nativos, mas também por colocar objetos no espaço global, como Browser e $$. Acho a filosofia “as variáveis globais são terríveis” um pouco engraçada, pois até mesmo os carregadores de jQuery e JavaScript usam uma variável global.


Deixando de lado os globais intencionais, o vazamento de variáveis globais é uma prática ruim e o resultado de uma codificação desleixada. Então, como podemos ver quais propriedades são personalizadas no namespace global? É mais fácil do que o senhor pensa:



// UPDATE:  This method is too naive
// Returns an array of window property names
//keys(window);

// Inject an iframe and compare its `contentWindow` properties to the global window properties
(function() {
	var iframe = document.createElement('iframe');
	iframe.onload = function() {
		var iframeKeys = Object.keys(iframe.contentWindow);
		Object.keys(window).forEach(function(key) {
			if(!(key in iframeKeys)) {
				console.log(key);
			}
		});
	};
	iframe.src="https://davidwalsh.name/about:blank";
	document.body.appendChild(iframe);
})();


O senhor verá algumas variáveis que sabe que não foram definidas, como window, document, top, e location, mas os outros terão sido globais vazados (ou intencionais) definidos pelo código JavaScript personalizado!

  • buscar API

    Um dos segredos mais mal guardados sobre AJAX na Web é que a API subjacente a ele, XMLHttpRequest, não foi realmente criada para o uso que estamos fazendo dela. Fizemos bem em criar APIs elegantes em torno do XHR, mas sabemos que podemos fazer melhor. Nosso esforço para…

  • Crie um efeito de logotipo brilhante com CSS
  • Substituição de fontes usando o Cufón
  • Colunas de altura igual Flexbox

    O Flexbox era para ser o pote de ouro no longo, longo arco-íris de técnicas de layout CSS insuficientes. E a única decepção que tive com o flexbox foi o fato de os fornecedores de navegadores terem demorado tanto para implementá-lo. Também não posso afirmar que tenha ultrapassado os limites do flexbox, mas…