2016-05-19 1 views
1

Я пытаюсь написать функцию, которая принимает функции как аргументы (столько, сколько она получает) и возвращает их. Функция funcArg должна вернуть «Called me». Я использовал Array.prototype.slice.call (аргументы); для создания массива, но я не знаю, как вызвать функции die в этом массиве. Есть идеи? Благодаря!!Функция вызова функции/аргументы функции

var caller = function() { 
    return "Called "; 
}; 
var adder = function() { 
    return " me"; 
}; 
var funcArgs = function() { 
    var myArray = Array.prototype.slice.call(arguments); 
} 
funcArgs(caller); 
funcArgs(calleradder); 

ответ

1

Если у вас есть массив функций, которые вы можете цикл над ними forEach.

var caller = function() { 
    return "Called " 
} 

var adder = function() { 
    return " me" 
} 

var funcArgs = function() { 
    var myArray = Array.prototype.slice.call(arguments); 
    myArray.forEach(function (fn) { 
    console.log(fn()) 
    }) 
} 

funcArgs(caller, adder); // "Called me" 

Если вы хотите на самом деле возвращают значения, а не просто console.log их, вы можете использовать reduce возвратить строки каскадных кодов (или любой другой)

var funcArgs = function() { 
    var myArray = Array.prototype.slice.call(arguments); 

    return myArray.reduce(function (acc, fn) { 
    return acc + fn() 
    }, '') 
} 
+0

спасибо большое! Вы знаете, как я буду использовать метод concat для args? – learningcoding

+0

Что вы хотите делать с 'concat'. Каков желаемый результат? – azium

+0

«Called» и «me», которые будут возвращены, предположительно должны быть в одной строке, например, Called me, противоположной тому, чтобы быть на отдельных строках. – learningcoding

2

Вы можете сделать это с помощью reduce.

var funcArgs = function() { 
    var functions = Array.prototype.slice.call(arguments); 
    return functions.reduce(function(total, f) { 
    return total + f(); 
    }, ''); 
}; 

Как это работает, если вы начинаете с набора функций. Затем мы проходим каждую функцию по одному. Затем мы вызываем эту функцию и добавляем ее к результату предыдущей функции. Разделение этого на более простой код будет выглядеть так:

var funcArgs = function() { 
    var functions = [caller, adder]; 
    var result = ''; 
    result += functions[0](); // caller(); 
    result += functions[1](); // adder(); 
    return result; 
}; 
+0

Спасибо! Это (последнее) решение, однако, будет работать, только если я знаю, сколько аргументов у меня будет. – learningcoding

+1

@learningcoding это не решение, он объясняет, как первый метод работает более подробно. – azium

+1

@learningcoding Последний не является решение. Это объяснение того, что происходит, когда вы вызываете 'funcArgs (вызывающий, сумматор)'. При написании кода, как это, важно понять, как это работает. –