【メモ】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を保持しつづけている。
(クリックするとカウントアップされていく)