RHS*_*ger 3 closures functional-programming
出于某种原因,我倾向于将闭包与函数语言相关联.我相信这主要是因为我所看到的关于闭包的讨论几乎总是在一个专注于函数式编程的环境中.话虽这么说,我能想到的闭包的实际用途本质上都是非功能性的.
在函数式语言中是否存在闭包的实际用法,或者在我的脑海中是否存在关联,主要是因为闭包用于以函数式编程语言(一流函数,currying等)常见的样式编程?
编辑:我应该澄清一下,我指的是实际的函数式语言,这意味着我正在寻找保持参照透明度的用法(对于相同的输入,你得到相同的输出).
编辑:添加到目前为止发布内容的摘要:
我在Javascript代码中使用了大量的闭包(这是一种非常实用的语言 - 我开玩笑说它是带有C服装的Scheme).它们提供了对函数私有的数据封装.
最无处不在的例子:
var generateId = function() {
var id = 0;
return function() {
return id++;
}
}();
window.alert(generateId());
window.alert(generateId());
Run Code Online (Sandbox Code Playgroud)
但那是Javascript关闭的问候世界.然而,还有更多的实际用途.
最近,在我的工作中,我需要用滑块编写一个简单的照片库.它做的事情如下:
var slide = function() {
var photoSize = ...
var ... // lots of calculations of sizes, distances to scroll, etc
var scroll = function(direction, amout) {
// here we use some of the variables defined just above
// (it will be returned, therefore it is a closure)
};
return {
up: function() { scroll(1, photoSize); },
down: function() { scroll(-1, photoSize); }
}
}();
slide.up();
// actually the line above would have to be associated to some
// event handler to be useful
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我使用闭包来隐藏所有向上和向下滚动逻辑,并且有一个非常语义的代码:在Javascript中,"向上滑动"你会写slide.up().