Panda Noir

JavaScript の限界を究めるブログです。

カウンタ変数なしでconsole.logをn回に一回くらい実行する

(この記事はQiitaで僕が書いたものを移行した記事です。記事中のコメントはQiitaの該当記事を参照ください)

注意: 厳密にn回に1回ではないです

10000回もconsole.logを呼び出すと重くなりますよね。それでcount変数を作ってcount%1000===0として実行回数を落とす。でも、監視対象がどんどん増えていって、count変数が増えて、countが配列になって、countを監視するために引数を工夫して…という恐ろしいことになったことがある人向けの記事です。

解決したいこと

count変数なしで、関数が10000回呼ばれるごとにconsole.logを呼び出したい。

概要

乱数を使います。なんで思いつかなかったんだろうってくらい簡単な事でした。

function lightLog() {
    if ((0 | Math.random() * 10000) === 0) {
        console.log.apply(console, [].slice.call(arguments));
    }
};

使い方は lightLog('hoge'); のように普通にconsole.log呼ぶ感じで引数渡すだけです。(0 | Math.random() * 10000)の10000の部分を変更すると実行する頻度が変わります。

まあ実装見て分かる通りおよそ1万回ごとであって厳密に1万回ではないです。でも9997回でも9810回でも別にいいですよね。キリがいいから1万回なだけですしおすし。