scope - Javascript: Issue with variable scoping and anonymous function -


i have sample code:

function(){   var events = [];   var pages = ["a", "b", "c"];   for(var pageindex in pages){     var pagename = pages[pageindex];     var e = function(){       console.info(pagename);     };     events.push(e);   }   for(var eventindex in events){    console.info("index: " + eventindex);    events[eventindex]();   } } 

output:

index: 0  c  index: 1  c  index: 2  c  

desired output:

index: 0   index: 1  b  index: 2  c  

is there standard practice this?

each e function create closure accesses external variable pagename enclosing code. pagename see value at time function run. @ end of loop pagename "c", of functions use when executed.

you can fix wrapping function in following way, bind current value of pagename function create:

function(){   var events = [];   var pages = ["a", "b", "c"];   for(var pageindex in pages){     var pagename = pages[pageindex];     var e = (function(data) {       return function() {         console.info(data);       };     })(pagename);     events.push(e);   }   for(var eventindex in events){    console.info("index: " + eventindex);    events[eventindex]();   } } 

Comments

Popular posts from this blog

java - WrongTypeOfReturnValue exception thrown when unit testing using mockito -

php - Magento - Deleted Base url key -

android - How to disable Button if EditText is empty ? -