【问题标题】:Shouldn't the definition of closure be more stringent?关闭的定义不应该更严格吗?
【发布时间】:2011-12-15 01:14:04
【问题描述】:

我相信我在闭包的定义中发现了歧义。具体来说,它似乎允许外部范围成为全局范围。

例如来自维基百科的文章:http://en.wikipedia.org/wiki/Closure_(computer_science)

“闭包(也称为词法闭包、函数闭包或函数值)是一个函数以及该函数的非局部变量的引用环境。”

特别是非本地可以包括全局变量。甚至http://en.wikipedia.org/wiki/Non-local_variable 上关于非局部变量的文章也指出“该术语可以指代全局变量”。它确实继续通过说明全局变量不是通常的意思来限定问题。

尽管如此,我认为我们可能需要更严格地定义闭包,以明确排除全局变量作为非局部变量。还是在某些情况下全局变量在这种情况下有效?

编辑:

根据收到的 cmets 和其他想法,在我看来,似乎存在一种特定情况,即当前的闭包定义(忽略全局变量)不足。那就是当代码/函数可能被视为闭包时,只能引用也是全局变量的非局部变量

【问题讨论】:

  • 如果我正确理解了这个问题,你的意思是闭包不能引用全局变量。这不是真的。
  • 正式地,闭包包括全局变量,但由于即使没有闭包也可以访问全局变量,因此无需额外工作,因此人们在讨论与闭包相关的问题时往往会忽略它们。
  • 嗨,马特,是的,这就是我想要辨别的:从闭包中引用全局变量是否可以接受。或者更准确地说,如果唯一可能的外部作用域是全局作用域,那么您正在创建的真的是一个闭包,还是只是一个可以访问全局变量的函数?类似的东西——猜我自己的问题不够精确?
  • 你正在创建一个闭包,它除了非闭包函数之外没有任何特殊能力,因此大多数编译器将其优化为非闭包函数。问它是否“真的”关闭就像问“我买了一辆跑车,但我从不开快,我只用它去杂货店。它真的是一辆跑车吗?”

标签: closures


【解决方案1】:

IMO,是的,见上面的 cmets。这对应用程序开发人员可能无关紧要,但对编译器/解释器开发人员来说应该很重要。如果您一开始就可以识别出一些东西,那么优化它是没有意义的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多