I just tried this and Henry's right... assigning it within the closure doesn't make any difference.
Does anyone know of an efficient approach to accomplishing what I'm trying to do, assigning a different click handler per page number? Perhaps I could access the text inside the local span (1, 2, 3, 4, 5...) and use that as my variable? If that works, how would I do that? Thanks! On Jul 25, 5:22 am, Henry <[EMAIL PROTECTED]> wrote: > On Jul 25, 3:17 am, Karl Rudd wrote: > > > > > The "i" in the click function (closure) is just a reference > > to the "i" outside. That "i" changes with each iteration of > > the for loop. > > > If you want to save a copy of the value of "i" then create > > a _local_ var _inside_ the closure and assign it the > > value of "i". > > > For example: > > > for (var i = 1; i < totalPages + 1; i++) { > > $("#pages_panel").append($("<span> " + i + "</span>") > > .click(function() { var saved = i; pageClicked(saved); > > console.log("i:" + saved); })); > > > } > > How is that going to help? Executing - saved = i - inside the function > is still going to reference the - i - variable from the containing > scope, and so assign whatever value it has at the time of assignment, > which will still be after the containing loop has finished and so > after - i - has been assigned a value greater than - totalPages -. > > A more viable approach (though far from efficient as it creates two > function object for each iteration of the loop) would be to replace > the inner function with the inline execution of a function expression > that returned the inner function, passing in the current value of - i > - as an argument to the function call, and allowing the returned > function to reference the value at that point via the outer function's > formal parameter. I.E.:- > > for (var i = 1; i < totalPages + 1; i++) { > $("#pages_panel").append($("<span> " + i + "</span>") > .click( > (function(x){ > return (function(){ > pageClicked(x); > console.log("i:" + x); > }); > })(i) > ) > ); > > } > > Closures are tricky constructions till you get used to them. > > Yes, but understanding is worth more than familiarity. > > <URL:http://jibbering.com/faq/faq_notes/closures.html>