func() 和 func 一样吗?

Posted

技术标签:

【中文标题】func() 和 func 一样吗?【英文标题】:Is func() the same as func? 【发布时间】:2021-04-14 16:40:12 【问题描述】:

在从一本“雄辩”的书中学习 javascript 时,我偶然发现了这个程序:

function wrapValue(n) 
  let local = n;
  return () => local;


let wrap1 = wrapValue(1);
let wrap2 = wrapValue(2);
console.log(wrap1());
// → 1
console.log(wrap2());
// → 2

我的问题是输出是wrap1() 而不是wrap1

甚至可以做到console.log(wrap1)吗? 如果可能的话,wrap1()wrap1 是同一个东西吗?

编辑:他们将问题标记为与What is the difference between a function call and function reference? 重复,但我的问题是认为在let wrap1 = wrapValue(1); 中,wrap1 获得了一个值,但事实是它获得了一个函数。而已。所谓的重复与我的失明无关。

【问题讨论】:

重复What is the difference between a function call and function reference? wrapValue 返回一个箭头函数 () => 这就是为什么你需要通过添加 () 来调用它来获得结果 @KubwimanaAdrien 哦,我没看到!所以我不能做console.log(wrap1) 因为wrap1 不是返回值而是返回函数,对吧? @Davide 没错 【参考方案1】:

wrapValue 返回一个 lambda 函数,这是 console.log(wrap1) 将打印的内容。 console.log(wrap1()) 实际运行该函数并打印结果。

【讨论】:

感谢您的回答。因此,如果我做对了,输出将是相同的,但 wrap1() 做了一个不必要的进一步步骤,不是吗? 不,输出不同。第一个打印函数本身,但第二个打印函数的结果。 您的意思是,在第一种情况下,输出将类似于:function wrapValue(n) let local = n; return () => local; ? 不,只是 () => 本地。您可以检查 chrome devtools

以上是关于func() 和 func 一样吗?的主要内容,如果未能解决你的问题,请参考以下文章

在C语言程序中,func()是啥意思?

我应该使用 Func<T> 代替私有方法吗?

我可以使用 str2func 调用类方法吗?

func(QWidget* const &widget) VS func(QWidget* const widget)

使用 func<> 委托时,我可以以任何方式更改签名吗?

我可以在 Action 或 Func 代表中使用参数吗?