我正在阅读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
答案 0 :(得分:0)
在第二种情况下,返回对函数的引用。因此,您可以随时调用它。对于您将值3传递给wrap3
的情况,wrapValue
保留此引用。然后调用wrap3
保留引用的函数。这是通过wrap3()
完成的。在第一种情况下,值是通过调用函数wrapValue
返回的。
答案 1 :(得分:0)
出于只记录相同值而无需对其进行任何其他操作的目的,绝对没有任何区别。
但是在某些情况下,您必须在返回值之后再进行其他操作
function doubleTheValue(n){
const val = n * 2;
return () => val * 2;
}
const doubleValueAgain = doubleTheValue(2);
console.log(doubleValueAgain());
所以要回答您的问题,如果尝试返回一个函数而不只是返回值,那么就必须再次调用返回的结果以获取值。