How to preserve setTimeout parameter value until execution?
javascript, settimeout
Solution
The problem is that `setTimeout` doesn't run the function passed in until 1 second has passed. What that does happen `a` has changed, so when `callSomeAjax(a)` is ran, `a` is at its new value.
You need to capture (in a closure) the value of `a` before calling `setTimeout`.
var a = 1;
function show(a) {
console.log(a);
}
(function(a){
setTimeout(function () {
show(a)
}, 1000);
}(a));
a = 3;
DEMO: http://jsfiddle.net/U59Hv/2/
Problem
I have a bit of code that executes on keypress and saves data to a database as the user types. I added a setTimeout function with a clearTimeout infront of it so not EVERY single character the user enters is sending out an Ajax request to save data. While the setTimeout works great for one input field , if the user decides to switch input fields quickly (before the setTimeout delay is up) the parameter passed to the callSomeAjax changes before the function is executed. Simplified version of what's happening... ``` var a = 1; //some user data //function to call ajax script to save data to database function callSomeAjax(a) { console.log(a); } setTimeout(function(){callSomeAjax(a)},1000); //executes callSomeAjax after 1 second delay a=3; //change user data before callSomeAjax executes // Result of console.log is 3, not 1 like I want it to be... ``` Code on fiddle Any ideas?