在功能中使用时,我很难理解闭包。
在下面的代码中,我创建了一个获取两个参数并返回一个函数的函数,但是因为我看过一些教程,他们展示了一些相似的例子,他们将它们称为 "捕获常量和变量值使用闭包" ,但在我的例子中,我并没有真正看到闭包。
我可以说下面的代码示例incrementer()
是闭包吗?
func incrementNumber(baseNumber:Int, increaseBy: Int) -> () -> Int {
var baseNum = baseNumber
func incrementer() -> Int {
baseNum += increaseBy
return baseNum
}
return incrementer
}
let increase = incrementNumber(100, increaseBy: 20)
increase()
increase()
increase()
答案 0 :(得分:1)
是。 incrementer()
正在关闭变量baseNum
和increaseBy
,因为当声明函数incrementer()
时,这两个变量都在范围内。
这个程序员stackexchange post很好地解释了它。正如你在那里看到的那样,这个例子(虽然在javascript中)看起来与你的代码非常相似。