Какова будет реализация функции в этом сценарии - PullRequest
0 голосов
/ 10 декабря 2018

У нас есть функции, созданные для выполнения всех возможных различных арифметических операций над двумя переданными числами:

function add(a, b){return a + b}
function mul(a, b){return a * b}

...

Теперь, какова будет реализация функции-оболочки, поэтому функция-оболочка должна делать то, что просит третий аргумент?.

function wrapper(a,b,..){
 ? 
}

для экземпляра, если я вызову:

var test = wrapper(4,5,..)

test значение должно быть основано на третьем аргументе

1 Ответ

0 голосов
/ 10 декабря 2018

Вы можете передать ссылку на функцию в качестве третьего аргумента и использовать его для вычисления результата, используя первые два аргумента:

function add(a, b){return a + b}
function mul(a, b){return a * b}

function wrapper(a, b, callback){
  return callback(a, b);
}


console.log(wrapper(4, 5, add))
console.log(wrapper(4, 5, mul))

Обратите внимание, что нет скобок, когда вы передаете add или mul в качестве аргумента - это потому, что если вы сделаете add(), вы бы выполните функцию, и вы передадите результат этой функции.В случае add() вы бы сложили вместе undefined и undefined, поскольку ничего не передается, wrapper(4, 5, add()) фактически приводит к wrapper(4, 5, NaN)

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

//mapping of action name to logic that will be executed
var actionLookupTable = {
  "addition": add,
  "multiplication": mul
}

function defaultAction() { /* a no-op */}

function add(a, b){return a + b}
function mul(a, b){return a * b}

function wrapper(a, b, actionName){
  //fetch the logic to execute for the action. 
  //If the action name is not recognised, use a default one otherwise you will get an error
  var logic = actionLookupTable[actionName] || defaultAction;
  return logic(a, b);
}


console.log(wrapper(4, 5, "addition"));
console.log(wrapper(4, 5, "multiplication"));
console.log(wrapper(4, 5, "division")); //no implementation but no error is raised
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...