以下是维基百科article
的闭包示例function startAt(x)
function incrementBy(y)
return x + y
return incrementBy
variable closure1 = startAt(1)
variable closure2 = startAt(5)
根据文章
调用closure1(3)将返回4,而调用closure2(3)将返回8.
幕后发生了什么?
为什么这段代码不会在真正的编程语言中抛出任何错误? incrementBy需要第二个变量来做总和,不是吗?
当我们用一个参数调用closure()时,我是否正确将它分配给incrementBy范围内的y?
我是否正确将closure2两个绑定到与closure1绑定到的记录不同的记录?
答案 0 :(得分:0)
为什么这段代码不会在真正的编程语言中抛出任何错误? incrementBy需要第二个变量来做总和,不是吗?
为什么会抛出错误?是incrementBy
使用两个变量x
和y
,但它们都已定义。调用x
时,5
被定义为startAt(5)
。在调用y
时,3
被定义为closure2(3)
。
当我们用一个参数调用closure()时,我是否正确将它分配给incrementBy范围内的y?
是的,你在 a y
内签署incrementBy
是正确的,但请注意,有多个函数名为{ {1}}。每次调用incrementBy
时都会创建一个。在您的代码中,有两个单独的startAt
函数由两个incrementBy
调用创建,每个函数都有自己的上下文,其范围内包含自己的startAt
。
我是否正确将closure2 two绑定到与封闭1绑定到的记录不同的记录?
是的,x
和closure2
是两个独立的函数,它们都是closure1
的副本,但在不同的上下文中。