#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);
vsconsole.log(wrap3());
Один — это значение, другой — функция, возвращающая это значение при вызове. Иногда вы хотите иметь функцию вместо прямого значения. Например, когда вы хотите использовать его в цепочке обещаний или в качестве аргумента методов массива.
Ответ №1:
Для того, чтобы просто регистрировать одно и то же значение, не делая с ним ничего другого, нет абсолютно никакой разницы.
Но есть сценарии, в которых вам нужно выполнить какую-то другую операцию позже после возврата значения следующим образом
function doubleTheValue(n){
const val = n * 2;
return () => val * 2;
}
const doubleValueAgain = doubleTheValue(2);
console.log(doubleValueAgain());
Итак, чтобы ответить на ваш вопрос, если вы попытаетесь вернуть функцию вместо просто значения, вам придется снова вызвать возвращаемый результат, чтобы получить значение.