【发布时间】:2011-12-15 01:14:04
【问题描述】:
我相信我在闭包的定义中发现了歧义。具体来说,它似乎允许外部范围成为全局范围。
例如来自维基百科的文章:http://en.wikipedia.org/wiki/Closure_(computer_science)
“闭包(也称为词法闭包、函数闭包或函数值)是一个函数以及该函数的非局部变量的引用环境。”
特别是非本地可以包括全局变量。甚至http://en.wikipedia.org/wiki/Non-local_variable 上关于非局部变量的文章也指出“该术语可以指代全局变量”。它确实继续通过说明全局变量不是通常的意思来限定问题。
尽管如此,我认为我们可能需要更严格地定义闭包,以明确排除全局变量作为非局部变量。还是在某些情况下全局变量在这种情况下有效?
编辑:
根据收到的 cmets 和其他想法,在我看来,似乎存在一种特定情况,即当前的闭包定义(忽略全局变量)不足。那就是当代码/函数可能被视为闭包时,只能引用也是全局变量的非局部变量
【问题讨论】:
-
如果我正确理解了这个问题,你的意思是闭包不能引用全局变量。这不是真的。
-
正式地,闭包包括全局变量,但由于即使没有闭包也可以访问全局变量,因此无需额外工作,因此人们在讨论与闭包相关的问题时往往会忽略它们。
-
嗨,马特,是的,这就是我想要辨别的:从闭包中引用全局变量是否可以接受。或者更准确地说,如果唯一可能的外部作用域是全局作用域,那么您正在创建的真的是一个闭包,还是只是一个可以访问全局变量的函数?类似的东西——猜我自己的问题不够精确?
-
你正在创建一个闭包,它除了非闭包函数之外没有任何特殊能力,因此大多数编译器将其优化为非闭包函数。问它是否“真的”关闭就像问“我买了一辆跑车,但我从不开快,我只用它去杂货店。它真的是一辆跑车吗?”
标签: closures