闭包是参考类型

当为常量或变量分配函数或闭包时实际上是在将该常量或变量设置为对函数或闭包的引用

Posted by Joker Hook on May 13, 2022

在闭包中获取值示例中,incrementBySevenincrementByTen是常量,但这些常量引用的闭包仍然能够增加它们捕获的runningTotal变量。这是因为函数和闭包是参考类型。

每当您为常量或变量分配函数或闭包时,您实际上是在将该常量或变量设置为对函数或闭包的引用。在上面的示例中,incrementByTen指的是闭包的选择是常量,而不是闭包本身的内容。

这也意味着,如果您将闭包分配给两个不同的常量或变量,这两个常量或变量都引用相同的闭包。

let alsoIncrementByTen = incrementByTen
alsoIncrementByTen()
// returns a value of 50

incrementByTen()
// returns a value of 60

上面的示例表明,调用alsoIncrementByTen与调用incrementByTen相同。由于它们都引用相同的闭包,因此它们都会增量并返回相同的运行总数。