Function currying in Javascript
Posted
by kerry
on Gooder Code
See other posts from Gooder Code
or by kerry
Published on Wed, 24 Feb 2010 13:55:00 +0000
Indexed on
2010/03/18
23:21 UTC
Read the original article
Hit count: 558
Do you catch yourself doing something like this often?
1: Ajax.request('/my/url', {'myParam': paramVal}, function() { myCallback(paramVal); });
Creating a function which calls another function asynchronously is a bad idea because the value of paramVal may change before it is called. Enter the curry function:
1: Function.prototype.curry = function(scope) {
2: var args = [];
3: for (var i=1, len = arguments.length; i < len; ++i) {
4: args.push(arguments[i]);
5: }
6: var m = this;
7: return function() {
8: m.apply(scope, args);
9: };
10: }
This function creates a wrapper around the function and ‘locks in’ the method parameters. The first parameter is the scope of the function call (usually this or window). Any remaining parameters will be passed to the method call. Using the curry method the above call changes to:
1: Ajax.request('/my/url', {'myParam': paramVal}, myCallback.curry(window,paramVal));
Remember when passing objects to the curry method that the objects members may still change.
© Gooder Code or respective owner