在函数中使用时,我很难理解闭包 .
在下面的代码中,我创建了一个函数,它获取了两个参数并返回一个函数,但是因为我看到了一些教程,他们展示了一些类似的例子,他们将它们称为 "capturing constants and variables values using closures" ,但在我的例子中,我并没有真正看到闭包 .
我可以说在下面的代码示例中 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()
1 回答
是 .
incrementer()
正在关闭变量baseNum
和increaseBy
,因为当声明函数incrementer()
时,两个变量都在范围内 .这个程序员stackexchange post很好地解释了它 . 正如你在那里看到的那样,这个例子(虽然在javascript中)看起来与你的代码非常相似 .