asynchronous - Variable in JavaScript closure -


i have loop that subscribes different pubnub channels (dont worry pubnub specifics, problem seems scope/closures). when receive message, want resolve promise.

the problem indicated comments in code below. basically, outside pubnub subscribe, counter i gives expected value, inside subscribe callback, not. why case? how fix it?

_.times(3, function(i) {     console.log('subscribe'+i); // here counter working fine     pubnub.subscribe({         channel_group: 'usersu' + (i + 1) + ':1',         callback: function(msg) {             console.log('recv:', msg, message, msg == message, i); // here not! 0             if (msg == message) {                 console.log('resolve');                 deferreds[i].resolve();             }         },         error: function(err) {             deferreds[i].reject(err);         }     }); }); 

i hoping solved issue.

i modified code run locally on browser. declared new function subscribe (since don't know pub nub subscribe). code works , corresponding "i" value printed.

i think need provide bit more context , environment community debug further.

function subscribe(obj) {    console.log(obj.channel_group);    obj.callback("hello");    obj.error("error5");  }    _.times(3, function(i) {    console.log('subscribe' + i); // here counter working fine    subscribe({      channel_group: 'usersu' + (i + 1) + ':1',      callback: function(msg) {        console.log('recv:', msg, "hello", "hello"==msg, i); // here not! 0        if (msg == "hello") {          console.log('resolve');          console.log(i);          //deferreds[i].resolve();        }      },      error: function(err) {        console.log(i + ": " + err);        //deferreds[i].reject(err);      }    });  });
<script src="https://github.com/jashkenas/underscore/blob/master/underscore.js"></script>