首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何命名生成闭包的函数

如何命名生成闭包的函数
EN

Stack Overflow用户
提问于 2014-01-20 19:28:37
回答 1查看 1.1K关注 0票数 6

我理解闭包,尽管我很少用到它们,但是每当我能压缩一个闭包时,我都不知道如何命名它。

我能想到的最好的方法就是在函数名之前加上一个"make“:

代码语言:javascript
运行
复制
function makeSortSelection(settings1, settings2) {
    return function() {
        /* sort stuff attending to settings1 and settings2 */
    };
}

$("#sort-button").click(makeSortSelection('ascending',foo));

(我几乎总是在Javascript中使用它们,但我猜这是一个与语言无关的问题)

遗憾的是,我发现的大多数闭包示例只使用了"foo“或"sayHello”。我喜欢给我的所有函数一个动词作为名称:函数“做东西”,它们的名称反映了它("sortSelection","populateForm")。本着同样的精神,我应该如何命名闭包,那就是“做做事情”?您使用哪些约定,最常见的约定是什么?

PD:我倾向于在有疑问的时候使用Google's style guide,但它没有说明这一点。

EN

Stack Overflow用户

发布于 2014-01-25 13:54:19

闭包不是可命名的实体。函数是可命名的,但闭包不是函数。

与定义“闭包”相比,更容易定义出现闭包的情况。

只要存在对内部函数的持久外部引用,(javascript中的)(词法上的)闭包就会发生并继续存在,但是外部函数、内部函数或对内部函数的引用本身都不是闭包。从实际意义上讲,闭包是由所有这些元素加上语言的一个功能组成的结构,当垃圾收集存在时,可以通过该功能来抑制垃圾收集。

在我看来,正如一些人所说的那样,“所有函数都是闭包”是错误的。是的,所有函数都有作用域链,但是只有当外部函数完成并返回,并且存在对内部函数的持久引用时,闭包才应该被视为存在。

一定要给返回的函数一个基于动词的名称,就像任何其他命名函数一样-没有必要仅仅因为它是由另一个函数返回的就对它进行不同的处理。从各个方面来说,返回的函数只是一个函数--它只是碰巧是一个可以访问外部函数作用域的函数(外部函数的执行上下文)--仅此而已。

编辑:

我只是意识到我没有解决问题的关键点--重新表述了“如何命名一个函数,这个函数是为了通过返回一个函数来形成闭包而存在的”。

像你一样,我也有个问题。

大多数情况下,我会使用"make“前缀,如您的示例所示。这似乎在大多数情况下是最好的。

我还使用了"_closure“作为后缀,这不符合”动词规则“,但具有独立于自然语言的优势。"Make“严格来说是一个英语单词,说其他语言的人可能会选择使用他们自己的"faire","machen”等。另一方面,“闭包”是通用的--据我所知,它仍然没有被翻译成其他语言。因此,在可能在全球范围内使用/修改的脚本中,“闭包”作为后缀(或前缀)可能更好。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21232832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档