Разница между возвратом функции и оператора внутри функции

#javascript #function #lambda #closures

#javascript #функция #лямбда #замыкания

Вопрос:

Я читаю 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
  

Комментарии:

1. console.log(wrap1); vs console.log(wrap3()); Один — это значение, другой — функция, возвращающая это значение при вызове. Иногда вы хотите иметь функцию вместо прямого значения. Например, когда вы хотите использовать его в цепочке обещаний или в качестве аргумента методов массива.

Ответ №1:

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

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

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

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

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