LINUX.ORG.RU

История изменений

Исправление crutch_master, (текущая версия) :

function call(...args) {
   let values = args.pop();
   let ret = args.pop()(...values);
   args.reverse().forEach(f=>{
       ret = f(ret); 
   });
   return ret;   
}

//test:
var f = function(v) {return v += "f "};
var f1 = function(v) {return v += "f1 "};
var f2 = function(v) {return v += "f2 "};
var f3 = function(v) {return v += "f3 "};
var x = "Test ";

call(f, f1, f2, f3, [x]) === f(f1(f2(f3(x))))
//true ("test f3 f2 f1 f ")

Исходная версия crutch_master, :

function call() {
   let args = Object.values(arguments);
   let values = args.pop();
   let ret = args.pop()(...values);
   args.reverse().forEach(f=>{
       ret = f(ret); 
   });
   return ret;   
}

//test:
var f = function(v) {return v += "f "};
var f1 = function(v) {return v += "f1 "};
var f2 = function(v) {return v += "f2 "};
var f3 = function(v) {return v += "f3 "};
var x = "Test ";

call(f, f1, f2, f3, [x]) === f(f1(f2(f3(x))))
//true ("test f3 f2 f1 f ")