JavaScript: Passing parameters to a callback function
If you want something slightly more general, you can use the arguments variable like so:
function tryMe (param1, param2) { alert(param1 + " and " + param2);}function callbackTester (callback) { callback (arguments[1], arguments[2]);}callbackTester (tryMe, "hello", "goodbye");
But otherwise, your example works fine (arguments[0] can be used in place of callback in the tester)
This would also work:
// callback functionfunction tryMe (param1, param2) { alert (param1 + " and " + param2); } // callback executer function callbackTester (callback) { callback(); } // test functioncallbackTester (function() { tryMe("hello", "goodbye"); });
Another Scenario :
// callback functionfunction tryMe (param1, param2, param3) { alert (param1 + " and " + param2 + " " + param3); } // callback executer function callbackTester (callback) { //this is the more obivous scenario as we use callback function//only when we have some missing value//get this data from ajax or computevar extraParam = "this data was missing" ;//call the callback when we have the data callback(extraParam); } // test functioncallbackTester (function(k) { tryMe("hello", "goodbye", k); });
Your question is unclear. If you're asking how you can do this in a simpler way, you should take a look at the ECMAScript 5th edition method .bind(), which is a member of Function.prototype. Using it, you can do something like this:
function tryMe (param1, param2) { alert (param1 + " and " + param2);}function callbackTester (callback) { callback();}callbackTester(tryMe.bind(null, "hello", "goodbye"));
You can also use the following code, which adds the method if it isn't available in the current browser:
// From Prototype.jsif (!Function.prototype.bind) { // check if native implementation available Function.prototype.bind = function(){ var fn = this, args = Array.prototype.slice.call(arguments), object = args.shift(); return function(){ return fn.apply(object, args.concat(Array.prototype.slice.call(arguments))); }; };}