プログラミングのメモ用BLOGです 自己紹介:あんどれ へっぽこプログラマです

ラベル

2007年7月1日

クロージャ(Closure)のメモ

(javascript上での)クロージャの理解のためのサンプル


<html>
<head>
<script laungage="javascript">

var x1 = function() {
var Y = 0;
return function(Z) {
Y += Z;
return Y;
}
}

var x2 = x1();//x2は、x2 = function(Z){...}と同じ
var x3 = x1();//x3は、x3 = function(Z){...}と同じ

document.writeln("x2(1)は"+x2(1));//1
document.writeln("x2(2)は"+x2(2));//3
document.writeln("x2(3)は:"+x2(3));//6

document.writeln("x3(1):"+x3(1));//1
document.writeln("x3(2):"+x3(2));//3

x1= function(){return function() {return 1}};
x3 = x1();

document.writeln("x3(3):"+x3(3));//X1()が戻す関数が新しくなったので1

</script>
</head>
<body>
</body>
</html>



※今までvar x2 = x1()をx2 = x1(C#の参照と勘違い)と同じと思っていた。
※x2 = function(Z){...}でわかりやすくなった。
※x1内の関数が入れ代わらない限りローカル変数Yは保持されている。

参考サイト
javascriptを理解するためのたった2つの大切なこと:改
JavaScriptの巧い書き方のコメント内(「関数実行後も内部で定義したデータにアクセス出来る」で検索)

以下はまだ読んでいない
クロージャとOOPとJavaScriptの謎仕様
Martin Fowler's Bliki in Japanese - Closure