読者です 読者をやめる 読者になる 読者になる

【メモ】javascriptにおけるクロージャ

関数の中で定義された関数は、親関数のローカル変数への参照を保持する。

<html>
<head>
<script language="javascript">
function init() {
	var btn = document.getElementById("btn1");
	btn.onclick = (function() {				//A
					var clickCnt = 0;
					return function() {		//B
								clickCnt++;
								alert(clickCnt);
							}
					
				})();
}
</script>
</head>

<body>
<input type="button" id="btn1" />
<script language="javascript">
init();
</script>
</body>
</html>

無名関数Bはreturnされてbtn.onclickに定義されているが、無名関数Bの親関数である無名関数Aのローカル変数clickCntを保持しつづけている。
(クリックするとカウントアップされていく)