Javascript 使用setTimeout(fn,0)将代码执行延迟到当前调用堆栈之后是否可靠?

Javascript 使用setTimeout(fn,0)将代码执行延迟到当前调用堆栈之后是否可靠?,javascript,Javascript,我有一个函数,调用次数未知。我需要知道函数运行了多少次,所以我正在执行: (function () { var i = 0, increment = function () { if (i === 0) { setTimeout(function () { console.log('increment was called ' + i + ' times.'); //

我有一个函数,调用次数未知。我需要知道函数运行了多少次,所以我正在执行:

(function () {    

    var i = 0,
        increment = function () {
            if (i === 0) {
                setTimeout(function () {
                    console.log('increment was called ' + i + ' times.'); // increment was called 3 times.
                    i = 0;
                }, 0);
            }
            i++;
        };

    increment();
    increment();
    increment();

})();

有人能告诉我这在所有浏览器中是否都是可靠的,或者是否有更好的模式来实现这一点吗?

是的,这段代码似乎在所有浏览器中都是可靠的,即使在IE的最低版本中也是如此。我在IE8中尝试了这一点,但效果很好。

setTimeout()
在队列中放置了一个函数,当所有其他函数都已运行时执行


如果在调用
increment()
之前调用
setTimeout()
几次,您可能会注意到
i
变量的值大于1。

有趣的设计,尽管我会使超时至少13毫秒,因为有些浏览器将数字视为太低,可能会立即运行它,不要引用我的想法是的,这是可靠的,注意到在所有现代浏览器中,根据html5规范,小于4ms的指定延迟将被四舍五入到4ms。你怎么有两个答案?