pig's diary

何でも忘れるので万年初心者ね

返り値を関数にして、クロージャ作成完了!

この方のソースをみながら勉強させていただいてます。
http://dev.worksap.co.jp/Members/nogunogu/2010/07/14/iphonesafari-javascript%E3%81%A8css%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%A7%E3%83%95%E3%83%AA%E3%83%83%E3%82%AF%E6%93%8D%E4%BD%9C%E3%82%92%E5%AE%9F%E8%A3%85%E3%81%97-3/

iphoneのtouchイベントについて子細に調べており、とても参考になります。「誰の役にたつのか?」を連発されており、コメントも受け付けていないようなのですが、いるよ!ここに感謝してる人間いるよ!!

で、見たことなくて「なるほどな」と思ったコードがあったのでロギング。
関数①の返り値が関数②になっていて、その関数②をハンドラに指定するから、関数①で定義した変数の値を保持してられる。(こういう変数を関数②のグローバル変数とかって言うの?何て言うの)

//...
var touchHandler = getTouchHandler();
//...
box.addEventListener("touchmove",  touchHandler, false);
//...

function getTouchHandler() {
  console.log('はじめに一回だけ実行!');
  var startX = 0;
  
  return function(e) {
    console.log('touchmoveの度に実行!!');
    
    e.preventDefault();
    //...
  }
}

オブジェクトを作って new 演算子インスタンスを生成・・・してもいいんだけど、1度きりだしなんか無駄。でも上のやり方だと、使い捨てオブジェクトというか、とてもシンプルにインスタンスの仕組みを1個作ることができる。
もっと人のコード読まなければ!!