{"id":821,"date":"2012-07-12T17:45:15","date_gmt":"2012-07-13T03:45:15","guid":{"rendered":"http:\/\/mymonkeydo.com\/?p=821"},"modified":"2012-07-12T17:45:15","modified_gmt":"2012-07-13T03:45:15","slug":"passing-parameters-to-settimeout-in-a-loop","status":"publish","type":"post","link":"https:\/\/mymonkeydo.com\/passing-parameters-to-settimeout-in-a-loop\/","title":{"rendered":"Passing parameters to setTimeout in a loop"},"content":{"rendered":"
I know to pass a parameter to a setTimeout function you would use javascript’s “closure” to get it to work:<\/p>\n
setTimeout(function(){alert(someParameter)}, 1000);<\/p>\n
However if you are setting someParameter in a loop, setTimeout will always alert the last value set to someParameter.<\/p>\n
<\/p>\n
The solution is to set a scope around setTimeout like so:<\/p>\n
var strings = [ \"hello\", \"world\" ]; var delay = 1000; for(var i=0;i<strings.length;i++) { \u00a0 \u00a0 (function(s){ \u00a0 \u00a0 \u00a0 \u00a0 setTimeout( function(){alert(s);}, delay); \u00a0 \u00a0 })(strings[i]); \u00a0 \u00a0 delay += 1000; }<\/code><\/pre>\n<\/pre>\nsource: http:\/\/stackoverflow.com\/questions\/6425062\/passing-functions-to-settimeout-in-a-loop-always-the-last-value<\/a><\/pre>\n <\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[2],"tags":[39],"yoast_head":"\n
Passing parameters to setTimeout in a loop - My Monkey Do<\/title>\n\n\n\n\n\n\n\n\n\n\n\n\t\n