I have a function called "tryMe" and I'm calling it without the parenthesis not precisely this but the idea is like what you would do here:
setTimeout(tryMe,200);
how can I pass parameters that I need?
I am using a jquery plugin that enables me to call a function but I have to call it withou the parenthesis or it executes itself upon loading.
setTimeout(function() { tryMe(parm1, parm2); }, 200);
A more robust offering, to ensure that the values of parm1, parm2 don't change before the timeout fires (per @lincolnk's comment):
setTimeout(function() {
var p1 = parm1;
var p2 = parm2;
tryMe(p1, p2);
}, 200);
@patrick dw, you're right, has to be evaluated before.
You can wrap tryMe in a closure.
For example:
var f = function(){tryMe('some parameter');};
setTimeout(f, 200);
Here, we create a function object, f, which calls tryMe with the desired parameter(s). Then we pass f to setTimeout. When the timeout expires, f will be called, which will in turn call tryMe with the desired parameters.
A word of warning if you wish to pass in parameters that may change before the timeout gets called (for example, if you are setting several timeouts in a for loop): you will want to bind those variables like so:
var f = function(someParamter){return function(){tryMe(someParameter);};};
setTimeout(f(someParameter), 200);
The reason simply doing something like
setTimeout(tryMe('some parameter'), 200); //Does not work.
doesn't work is because you are passing the result of evaluating tryMe instead of the function object tryMe itself.
You are not calling the function, the browser does - after 200 milliseconds. You are merely providing it with the function that needs being called. Firefox actually allows specifying additional parameters in the setTimeout call:
setTimeout(tryMe, 200, "first parameter", "second parameter");
However, as far as I know no other browsers support this feature so you should really use a closure function as explained by other answers already. Here you create a temporary function with the sole purpose of calling your original function with the right parameters.
setTimeout(function() {tryMe("first parameter", "second parameter")}, 200);
来源:https://stackoverflow.com/questions/7176292/how-to-pass-parameters-when-calling-a-function-without-the-parenthesis-javascri