プログラム言語 クロージャ

概è¦

※関数内ã§ãƒ­ãƒ¼ã‚«ãƒ«å¤‰æ•°ã‚’å‚ç…§ã—ã¦ã„る関数

//クロージャ(ローカル変数:prmIntã‚’å‚ç…§ã—ã¦ã„ã‚‹)
function Closure(prmInt) {
  return function() {
    alert(–prmInt);  //-1
  }
}

var myFunc1 = Closure(10);  //関数Closureãã®ã‚‚ã®ã‚’æ ¼ç´
var myFunc2 = Closure(10);  //関数Closureãã®ã‚‚ã®ã‚’æ ¼ç´

alert(myFunc1);
//myFunc1(=Closure)を実行ã—ã¦è¡¨ç¤ºâ‡’9(prmIntåˆæœŸå€¤ï¼š10)

alert(myFunc1);
//myFunc1(=Closure)を実行ã—ã¦è¡¨ç¤ºâ‡’8(prmIntåˆæœŸå€¤ï¼š9)

alert(myFunc2);
//myFunc2(=Closure)を実行ã—ã¦è¡¨ç¤ºâ‡’9(prmIntåˆæœŸå€¤ï¼š10)

var Timer = window.setTimeout("Closure()",1000)
//1秒後ã«Closure()を実行・・・○ 引数ã®ãªã„関数ã¯ã“れã§ï¼¯ï¼«

var Timer = window.setTimeout("Closure(10)",1000)
//1秒後ã«Closure(10)を実行・・・×

var Timer = window.setTimeout(function(){
  Closure(10);
} ,1000)
//1秒後ã«Closure(10)を実行・・・○

Follow me!