十三、如何在0秒打印出0, 1秒打印出1....

95 阅读1分钟
        /***
         * 1 写出执行后的结果
         */
        for (var i = 0; i < 5; i++) {
            setTimeout(function(){
                console.log(i)
            }, 1000)
        }
        // 结果:同时打印出5个5
        /**
         * 2 如何打印出501234
         */
           for(let i = 0; i < 5; i++) {
                setTimeout(function(){
                    console.log(i)
                }, 2000)
           }
           console.log(5)
        // 先打印出5, 2秒后同时打印出01234,其他方法:
           for(var i = 0; i < 5; i++) {
               (function(j){
                    setTimeout(function() {
                        console.log(j)
                    }, 2000)
               })(i)
           }
           console.log(i)
           // 或者:
        const output = function (j) {
            setTimeout(function () {
                console.log(j)
            }, 2000)
        }
        for (var i = 0; i < 5; i++) {
            output(i)
        }
        console.log(i)

        /**
         * 3 如何打印出012345, 0秒打印出0,1秒打印出1等等
         */
        //**************** 第一种方法:*****************
         for (var i = 0; i < 5; i++) {
             (function(j){
                 setTimeout(() => {
                     console.log(j) 
                 }, 1000 * j)
             })(i)
         }
         setTimeout(() => {
             console.log(i)
         }, 1000 * i)
        // 第二种方法:使用promise
        const tasks = []
        for (var i = 0; i < 5; i++) {
            (function (j) {
                tasks.push(new Promise((resolve, reject) => {
                    setTimeout(() => {
                        console.log(j)
                        resolve()
                    }, 1000 * j)
                }))
            })(i)
        }
        Promise.all(tasks).then(() => {
            setTimeout(() => {
                console.log(i)
            }, 1000 * i)
        })
       // 第三种方法,使用setInterval
       function count(num) {
            let i = 0
            const timer =  setInterval(() => {
                i += 1
                console.log(i)
                if (i >= num) {
                    clearInterval(timer);
                }
            }, 1000);
        }
        count(5)