ami_moor, не знаю правильно ли я понял суть задачи, но:
function test(a, b, c) { return 'a=' + a + ',b=' + b + ',c=' + c; }
var _test=partialAny(test,1,undefined,3,undefined);
console.log(_test(5, 9, 22, "asdasd"));
console.log(_test(1, 2, 4, "7"));
function partialAny(callable,_args){
if(!arguments.length)
throw new Error('Missing first argument');
var args=[];
for(var i=0;i<arguments.length;i++){
args[i]=arguments[i];
};
callable=args.shift();
if(typeof callable!='function')
throw new Error('First argument must be function');
return function(){
var _args=args.slice(0);
if(!!arguments.length){
var blanks=[];
for(var i=0;i<_args.length;i++){
if(_args[i]===undefined)
blanks.push(i);
};
for(i=0;i<arguments.length;i++){
var key=blanks.shift();
if(key!==undefined)
_args[key]=arguments[i];
else
_args.push(arguments[i]);
};
};
return callable.apply(window,_args);
};
};