function foo(fn) {
    var args = Array.prototype.slice.call(arguments, 1);
    return function() {
        return fn.apply(this, args.concat(Array.prototype.slice.call(arguments)));
    }
}
function bar(a, b){
    return a + b;
}
 
var x = foo(bar, 1);
alert(x(2)); // 3
var y = foo(bar, 2, 5);
alert(y()); // 7