我理解闭包,尽管我很少用到它们,但是每当我能压缩一个闭包时,我都不知道如何命名它。
我能想到的最好的方法就是在函数名之前加上一个"make“:
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,但它没有说明这一点。
发布于 2014-01-25 13:54:19
闭包不是可命名的实体。函数是可命名的,但闭包不是函数。
与定义“闭包”相比,更容易定义出现闭包的情况。
只要存在对内部函数的持久外部引用,(javascript中的)(词法上的)闭包就会发生并继续存在,但是外部函数、内部函数或对内部函数的引用本身都不是闭包。从实际意义上讲,闭包是由所有这些元素加上语言的一个功能组成的结构,当垃圾收集存在时,可以通过该功能来抑制垃圾收集。
在我看来,正如一些人所说的那样,“所有函数都是闭包”是错误的。是的,所有函数都有作用域链,但是只有当外部函数完成并返回,并且存在对内部函数的持久引用时,闭包才应该被视为存在。
一定要给返回的函数一个基于动词的名称,就像任何其他命名函数一样-没有必要仅仅因为它是由另一个函数返回的就对它进行不同的处理。从各个方面来说,返回的函数只是一个函数--它只是碰巧是一个可以访问外部函数作用域的函数(外部函数的执行上下文)--仅此而已。
编辑:
我只是意识到我没有解决问题的关键点--重新表述了“如何命名一个函数,这个函数是为了通过返回一个函数来形成闭包而存在的”。
像你一样,我也有个问题。
大多数情况下,我会使用"make“前缀,如您的示例所示。这似乎在大多数情况下是最好的。
我还使用了"_closure“作为后缀,这不符合”动词规则“,但具有独立于自然语言的优势。"Make“严格来说是一个英语单词,说其他语言的人可能会选择使用他们自己的"faire","machen”等。另一方面,“闭包”是通用的--据我所知,它仍然没有被翻译成其他语言。因此,在可能在全球范围内使用/修改的脚本中,“闭包”作为后缀(或前缀)可能更好。
https://stackoverflow.com/questions/21232832
复制相似问题