是否使用setTimeout(fn,0)推迟代码执行,直到当前调用堆栈可靠?

时间:2012-12-06 02:10:50

标签: javascript

我有一个被称为未知次数的函数。我需要知道函数运行了多少次,所以我正在做:

(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();

})();

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

2 个答案:

答案 0 :(得分:1)

setTimeout()在队列上放置一个函数,该函数在所有其他函数运行时执行。

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

答案 1 :(得分:0)

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