Skip to content

Instantly share code, notes, and snippets.

@jason-s13r
Created November 12, 2012 08:42
Show Gist options
  • Save jason-s13r/4058192 to your computer and use it in GitHub Desktop.
Save jason-s13r/4058192 to your computer and use it in GitHub Desktop.
Playing with JS.
/*
var named = (function(n) { return namedArguments(arguments); })(5, 10);
named.n = 5
named["-1"] = (the arguments)
named[0] = 5
named[1] = 10
*/
function namedArguments(args) {
var params = args.callee.toString().replace(/function\ ?([A-Za-z_]+[A-Za-z0-9_]+)*\((.*)\)\ ?\{.*/, "$2");
params = params.split(/,\ ?/);
var j = 0;
var named = {"-1": args};
for (var i = 0; i < args.length; i++) {
named[i] = args[i];
if (typeof params[j] != 'undefined')
named[params[j++]] = args[i];
}
return named;
}
function cacheFunc(func) {
var dict = {};
var callCount = 0;
var show = !!arguments[1];
return function(){
var key = JSON.stringify(arguments);
if (typeof dict[key] == "undefined") {
callCount++;
if (show) console.log(show, arguments, callCount);
dict[key] = func.apply(this, arguments);
}
return dict[key];
}
}
var factorial = cacheFunc(function(n){
if (n <= 0) return 1;
return n*factorial(n-1);
});
var fib = cacheFunc(function(n){
if (n < 2) return 1;
return fib(n - 1) + fib(n - 2);
})
console.log(factorial(5) + factorial(4) + factorial(4));
console.log(fib(5) + fib(4) + fib(4));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment