Tuesday, December 04, 2007

Watch out for a closure in a loop:

var info = [ "a", "b", "c", ... ];
for (var i = 0; i < 10; i++)
{
var str:String = info[i];
btn[i].onRelease = function() { getURL(str) }
}

All buttons will bring you to the last url because the closure maintains a reference to the variable str.

2 comments:

  1. I write a separate function to create the buttons :

    createButton = function(vID){
    this["btn"+vID].onRelease = function(){
    trace("bob");
    }
    }

    for (var i=0;i<5;i++){
    createButton(i);
    }

    ReplyDelete
  2. Anonymous2:33 AM

    Gostei muito desse post e seu blog é muito interessante, vou passar por aqui sempre =) Depois dá uma passada lá no meu site, que é sobre o CresceNet, espero que goste. O endereço dele é http://www.provedorcrescenet.com . Um abraço.

    ReplyDelete