我正在阅读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
在第二种情况下,返回对函数的引用。所以你可以随时打电话。 wrap3
对于你传递给wrapValue
的值为3的情况持有此引用。然后你调用wrap3
持有引用的函数。这是作为wrap3()
完成的。而在第一种情况下,通过调用函数wrapValue
返回值。
为了只记录相同的值而不做任何其他事情,绝对没有任何区别。
但有些情况下,您必须在返回值后再执行其他操作
function doubleTheValue(n){
const val = n * 2;
return () => val * 2;
}
const doubleValueAgain = doubleTheValue(2);
console.log(doubleValueAgain());
所以要回答你的问题,如果你试图返回一个函数而不仅仅是值,那么你必须再次调用返回的结果来获取值。