setTimeoutの中のthis
コメント付き動画サービス(仮)を作ってるんですが、内容的にViewをいじる作業が多く、結果としてCoffeeScriptばっか書いてます。
そしたら、setTimeoutの中でthisが思った通りのオブジェクトを指してなくてうまく動かない事案が発生。しばらくハマりました。
$('#comments p').map -> setTimeout -> commentMove $(this) , 1000
みたいな感じで、commentsブロック内の各コメントをjqueryオブジェクトとして取得してそれを一斉に動かすコードを書いたんですが、上記のコードでは上手く動かず。
$('#comments p').map -> comment = $(this) setTimeout -> commentMove comment , 1000
みたいに、一回ローカル変数commentを作ってやると上手くいきました。
結論としては、冒頭で述べたように、setTimeoutの中ではthisの参照先が変わっちゃうのが原因っぽいです。
分かってみたら簡単な話なんだけども。。。。