Swift中的闭包概念是否类似于Javascript中的闭包?

时间:2014-07-10 21:42:25

标签: javascript swift closures

Swift中闭包的一般概念类似于Javascript中的闭包,还是使用相同的单词" closure"但是有不同的规则?具体来说,(引用我的朋友)Javascript中的闭包是"水晶球,它只能在创建它的地方进行对等"。

因此,在Javascript中,此代码有效:

var outside = 5;
function test() {
 alert(outside); // returns 5
}

这是否意味着在Swift中,如果我以任何可能的方式创建闭包,它将在创建闭包的同一范围内访问所有局部变量?

(我已经看过维基百科对closure in programming的定义,但感觉太模糊了 - 具体来说,什么价值观是关闭跟踪的?)

1 个答案:

答案 0 :(得分:0)

Swift闭包捕获局部变量,以满足您的“只能在创建它的位置”的“水晶球”要求。

由于范围存在差异,Swift不会遇到在循环中使用闭包的相同问题

JavaScript closure inside loops – simple practical example

Swift等价物:

var funcs: [()->()] = []

for i in 0...3 {
  funcs += {
    println(i)
  }
}

for i in 0...3 {
  println(funcs[i]())
}

产生结果0,1,2,3