javascriptではコールバック等、その場で実行しない関数が多いですね。引数が渡せればスコープで悩まないのですがグローバルで管理すると結構面倒です。そこで、setTimeoutに引数を渡すサンプルができたのでお知らせします。
このサンプルは指定したRGB値からsetTimeoutでフェードします。
おそらくjavascriptの実装を想像すると、setTimeoutに渡された引数を一定時間後にevalしてんだと思います。つまりJSONで渡せば内部にobjectとして格納されて、一定時間後に評価されるから動作するんだと思います。
function draw(list)
{
if( list.r+list.g+list.b ==0 ){
return;
}
ctx.fillStyle=”rgb(“+list.r+”,”+list.g+”,”+list.b+”)”;
ctx.fillRect(0,0,ctx.canvas.width,ctx.canvas.height);
if( list.r ) list.r–;
if( list.g ) list.g–;
if( list.b ) list.b–;
setTimeout(“draw(“+toJSON(list)+”)”,10);
}
こんな感じであらゆるものを引数として渡せます。toJSONは、objectをjson文字列化するものを任意に選んで下さい。私の場合はコードを常に中に持ちたいので、人様の物を改造して使ってます。
Copyright(c) 2015 Birdland Ltd. All Rights Reserved.