在函数内返回函数vs语句之间的区别

问题描述 投票:0回答:2

我正在阅读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
javascript function lambda closures
2个回答
0
投票

在第二种情况下,返回对函数的引用。所以你可以随时打电话。 wrap3对于你传递给wrapValue的值为3的情况持有此引用。然后你调用wrap3持有引用的函数。这是作为wrap3()完成的。而在第一种情况下,通过调用函数wrapValue返回值。


0
投票

为了只记录相同的值而不做任何其他事情,绝对没有任何区别。

但有些情况下,您必须在返回值后再执行其他操作

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.