返回函数与函数内部的语句之间的区别

时间:2019-04-12 07:48:37

标签: javascript function lambda closures

我正在阅读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 :(得分: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());

所以要回答您的问题,如果尝试返回一个函数而不只是返回值,那么就必须再次调用返回的结果以获取值。