programação básica de javascript – os fechamentos

Os encerramentos em javascript

Em javascript, podemos usar closures para acessar a variável privada dentro de um wrapper de função, usando uma função anônima aninhada.

var f, g;
function foo() {
var x = 0;
f
= function() { return ++x; };
g
= function() { return --x; };
x
= 1;
alert
('inside foo, call to f(): ' + f()); // "2"
}
foo
();
alert
("call to g(): " + g()); // "1"
alert
("call to f(): " + f()); // "2"

Fechamentos e escopo

É importante notar que ao fazer um fechamento, ele leva o último valor da variável da função wrapper. Um caso comum é quando usamos um loop.

window.onload = function(){  
var el = document.getElementById("anyElement");
var events = [ "click", "mouseover", "mouseout" ];

for(var i=0;i<events.length;i++){
var item = events[i];
el
[ "on" + item ] = function(){
alert
( "event: " + item );
}
}
}

Observe que a atribuição de el [“on” + item] “é um encerramento. Ao executar este exemplo, observe que em cada evento onclick, onmouseover e onmouseout chamam o encerramento e mouseout sempre alerta, o último valor no loop leva o item variável .

Podemos resolver isso criando um novo escopo por uma função anônima que é executada automaticamente. portanto, em cada execução desta função, o item assume novos valores e a função assume o último valor contido na função wrapper em cada iteração é diferente.

Isso pode ser especialmente útil considerando que o javascript não oferece suporte a OOP, em vez de podermos criar uma pseudoclasse usando esse recurso.