Wednesday, 13 September 2017

jquery - scope of variables in JavaScript callback functions



I expected the code below to alert "0" and "1", but it alert "2" twice. I don't understand the reason. Don't know if it is a problem of jQuery. Also, please help me to edit title and tags of this post if they are inaccurate.













Answer



You're sharing the single i variable among all of the callbacks.



Because Javascript closures capture variables by reference, the callbacks will always use the current value of i. Therefore, when jQuery calls the callbacks after the loop executes, i will always be 2.



You need to reference i as the parameter to a separate function.



For example:




function sendRequest(i) {
$.get('http://www.google.com/', function() {
alert(i);
});
}

for (var i = 0; i < 2; i++) {
sendRequest(i);
}



This way, each callback will have a separate closure with a separate i parameter.


No comments:

Post a Comment

casting - Why wasn&#39;t Tobey Maguire in The Amazing Spider-Man? - Movies &amp; TV

In the Spider-Man franchise, Tobey Maguire is an outstanding performer as a Spider-Man and also reprised his role in the sequels Spider-Man...