我有这个代码,我想知道变量的值
x
在定义时被函数捕获,或者如果函数捕获了对变量本身的引用(或者是否有其他内容)?
如果
x
是
val
?
// Kotlin
var x = 1
fun f(y: Int) = x + y // Function adds 1 to a given Int
x = 2
val y = 3
val z = f(x + y) // Calls f with argument of 5
// z now maps to 7
// Swift
var x = 1
func f(_ y: Int) -> Int {return x + y} // Function adds 1 to a given Int
x = 2
let y = 3
let z = f(x + y) // Calls f with argument of 5
// z now maps to 7
所以每当我们调用函数时
f
,我们要评估它的身体
{ x + y }
在环境中定义了函数。当我们定义这个函数时,我们有一个环境
x == 1
.
所以函数
f
无论在何处调用,都会在其参数中添加1。这就是规则。(此规则适用于
let
/
val
不
var
我想?)
我的问题是关于函数闭包的
var
.
请给我一个详细的解释(按照作用域链在内存中定位变量),谢谢。