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 一样吗?的主要内容,如果未能解决你的问题,请参考以下文章