Closures em Javascript: o metodo each

Estou escutando uma discussão acalorada sobre Closures, Ruby e Javascript. Detalhes a parte, Javascript suporta funções anônimas (que não são closures) que podem ser passados como argumentos para outras funções.

Não seria otimo que um Array em javascript tivesse o método each para executar um bloco de código para cada elemento desse array? Usando o prototype da entidade Array eu posso adicionar um método each que faz isso:

Array.prototype.each = function(fun) {
	if (typeof fun != "function") return;
	for (var i=0; i<this.length; i++) {
		if(i in this) fun(this[i]);
	}
	return this;
}

var x = ["cat", "dog", "mouse", "bird"];
x.each(function(i) {
	alert(i);
});

Simples, não? Eu ainda posso adicionar outros métodos uteis como o map e o reduce.

São recursos interessantes que podemos utilizar quando for conveniente. Interessante foi descobrir a propriedade arguments, um array com todos os argumentos passados para a função que, se eu conhecesse alguns meses atrás, teria me solucionado alguns problemas :)

É claro que tudo isso ja vem no Prototype (né peleteiro).

Rating 4.00 out of 5
[?]

Sobre admin

Sou nerd
Esta entrada foi publicada em Uncategorized e marcada com a tag , . Adicione o link permanenteaos seus favoritos.

6 respostas a Closures em Javascript: o metodo each

  1. Usando Prototypejs você têm.

  2. admin disse:

    Claro, claro, mas a ideia é mostrar que pode ser possivel adicionar outras coisas interessantes — mas com cuidado pois vc esta lidando com o Core da parada :)

  3. É uma das características que eu mais gosto de JavaScript, o fato dele ser praticamente uma massinha de modelar.

  4. Por que função anônima não é closure? Função anônima (ou lambda) é closure tanto em Ruby quanto em Javascript.

  5. Uai, função anônima não é necessáriamente closure, precisa ter algo amarrado ao contexto anterior, mas pode ser closure ;)

  6. A função anônima do JavaScript é sim uma closure. Basta observar o comportamento das variaveis de fora do escopo dela quando usado dentro dela. Um exemplo muito comum, é o uso de this em setTimeout

    var that = this;
    setTimeout( function() {
    that.something();
    }, 100);

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">