2016-07-13 2 views
-1

Прошу прощения, первая попытка объяснить этот вопрос была плохой. Пытаясь узнать Javascript и вопрос из проблемы с кодом (кодовозы), я сильно озадачен. В нем указано, записывается функция, которая принимает другую функцию в качестве параметра и кэширует результаты, чтобы при отправке одних и тех же параметров возврат извлекался из кеша, а фактическая функция снова не вызывалась. Например:Как функция может обрабатывать параметры, переданные через другую функцию? Javascript

var x = function(a, b) { a * b }; 
var cachedFunction = cache(x); 

cachedFunction(4, 5); // function x should be executed 
cachedFunction(4, 5); // function x should not be invoked again, instead the cached result should be returned 
cachedFunction(4, 6); // should be executed, because the method wasn't invoked before with these arguments 

Я не уверен, как получить доступ к аргументам, отправленным через cachedFunction. Цель состоит в том, чтобы написать кеш, чтобы он мог обрабатывать функцию x с любым количеством аргументов.

+1

Вы на самом деле не проходит 'x',' 5' и '4' к' функции cache'. Вы передаете 5 и 4 функции 'x', получая результат, а затем передавая _that_ в' cache'. (для чего это стоит) – enhzflep

+1

Вы не можете. Функция 'cache' вызывается со значением' 20' (* result * of 'x (5,4)'), она не имеет представления о том, какие значения были переданы 'x', или что' x' был когда-либо назывался. Кроме того, что делает ваша функция 'cache'? Вы предположительно * передаете ему функцию? Потому что в настоящее время вы этого не делаете. –

+0

Извините, моя первая попытка понять проблему и сформулировать вопрос была плохой. Я переписал его. не уверен, что правильный этикет должен был полностью отказаться от оригинала и переписать или сделать такое большое редактирование. Приносим извинения, если бы я сделал первый. –

ответ

2

То, что вы описываете, невозможно.

Выражение x(5, 4) оценивается перед вызовом функции cache(). Он не получает функцию. Он получает значение 20.

0

вы можете вернуть таблицу, как это:

function x(a,b){ 
    return [a, b, a*b]; 
} 

после этого вы можете получить Params так:

var result=x(values1,value2); 
console.log(result[0]);// a == value1 
console.log(result[1]);// b == value2 
console.log(result[2]);// a*b == value1*value2 
1

В вашем примере, cache имеет доступ к возвращаемому значению x только , Он ничего не знает о том, как было вычислено это возвращаемое значение (то есть путем вызова x с параметрами 5, 4).

Вам необходимо отдельно передать функцию и ее параметры функции cache, e. г. следующим образом:

function cache(func, ...params) { 
 
    // Todo: do something with params 
 
    return func(...params); 
 
} 
 

 
function x(a, b){ 
 
    return a * b; 
 
} 
 

 
console.log(cache(x, 5, 4));

Смежные вопросы