setTimeoutに引数を渡す

投稿日:2019年04月14日 16時21分23秒

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文字列化するものを任意に選んで下さい。私の場合はコードを常に中に持ちたいので、人様の物を改造して使ってます。

[<< メールは有料にしよう!]

[スマートに節電しよう >>]