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
[?]

7 thoughts on “Closures em Javascript: o metodo each

  1. 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 :)

  2. 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);

  3. Como você bem disse nos comentários Tiago, tem que tomar cuidado pois voê está alterando o javacript em si ao mudar o prototype de Array.

    Melhor seria criar um wrapper (MyFancypantsArray) que herda de Array e implementa os métodos extras ;)

Deixe um Comentário

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="" highlight="">