しばしば「クロージャ」って言葉を見かけますが、皆さん、どんな意味で使っているんだろう?
単に無名関数(ラムダ式)をクロージャと呼んでいるのかな? それとも、無名関数とそこに出現する(ローカルでない)変数の束縛(環境と呼ぶんだったかな)を一緒にしたもの?
後者の意味だとして、たまたま変数束縛が空なら単なる無名関数になるから、気にする必要もないようなもんだが、束縛されてない非ローカル変数が残っていてもクロージャなのかな?
function makeAffineLinear(a) { return function(x) { return a*x + b; } }
makeAffineLinearで返される関数は、aを固定しても大域的bで挙動が変わってしまうのだけど、そういうのもクロージャなの? たしか、クロージャ(closure)の語源は「自由変数が全て閉じている(束縛されている)」って、そんなことではないのだったと記憶しているのだけど、それにも関わらず、全部閉じてないとクロージャじゃない気がする。いやっ、気がするだけで正確なことは知りません。クロージャのほんとの語源も忘れた。
[追記]と、これを書いてから気が付いたのだけど、「クロージャ」って“はてなキーワード”だったのね。たどって読んでみたら、上のbのような実行時の外部環境に影響されるのはクロージャじゃないように読める。[/追記]