Разница между возвратом функции и оператора внутри функции - PullRequest
0 голосов
/ 12 апреля 2019

Я читаю Eloquent JS, и в примере замыканий есть код блока, который возвращает функцию, возвращающую значение.В чем разница между этим и возвращением значения сразу.

// returning value 
function wrapValue(n) {
    let local = n;
    return local;
  }

let wrap1 = wrapValue(1);
let wrap2 = wrapValue(2);
console.log(wrap1);
// → 1
console.log(wrap2);
// → 2

// returning a value with a function
function wrapValue2(n) {
    let local = n;
    return () => local;
  }

let wrap3 = wrapValue2(3);
let wrap4 = wrapValue2(4);
console.log(wrap3());
// → 3
console.log(wrap4());
// → 4

Ответы [ 2 ]

0 голосов
/ 12 апреля 2019

Для того, чтобы просто записать одно и то же значение, ничего не делая с ним, нет абсолютно никакой разницы.

Но есть сценарии, в которых вы должны будете выполнить какую-то другую операцию позже при возврате значения следующим образом:

function doubleTheValue(n){
const val = n * 2;
return () => val * 2;
}

const doubleValueAgain = doubleTheValue(2);
console.log(doubleValueAgain());

Таким образом, чтобы ответить на ваш вопрос, если вы попытаетесь вернуть функцию, а не просто значение, вам придется снова вызвать возвращаемый результат, чтобы получить значение.

0 голосов
/ 12 апреля 2019

Во втором случае возвращается ссылка на функцию.Так что вы можете звонить, когда захотите.wrap3 содержит эту ссылку для случая, когда вы передаете wrapValue значение 3. Затем вы вызываете функцию, на которую wrap3 содержит ссылку.Это сделано как wrap3().Тогда как в первом случае значение возвращается при вызове функции wrapValue.

...