JavaScript - 定时器相关面试题

196 阅读1分钟

问fn1()、fn2() 分别输出什么,代码如下:

    function fn1() {
        for (var i = 0; i < 4; i++) {
            var tc = setTimeout(function (i) {
                console.log(i);
                clearTimeout(tc)
            }, 10, i);
        }
    }
    function fn2() {
        for (var i = 0; i < 4; i++) {
            var tc = setInterval(function (i, tc) {
                console.log(i);
                clearInterval(tc)
            }, 10, i, tc);
        }
    }
    fn1()
    fn2()

首先看fn1(),因为JavaScript的运行机制问题,定时器会被当异步处理,会先走完主流层,在执行定时器里的内容。

最终运行结果如下: