复现JS基础之利用闭包特性实现计数器、Promise和定时器实现睡眠函数

77 阅读1分钟

一. 计数器的实现

思路

直接自增

解题方法

利用闭包的特性直接让n自增就好

实现

/**
 * @param {number} n
 * @return {Function} counter
 */
var createCounter = function(n) {
    return function() {
       return n ++; 
    };
};

/** 
 * const counter = createCounter(10)
 * counter() // 10
 * counter() // 11
 * counter() // 12
 */

二. 睡眠函数的实现

思路

Promise + 定时器

解题方法

返回一个Promise对象,在其构造函数中利用定时器setTimeout延迟调用Promise中的resolve

实现

/**
 * @param {number} millis
 */
async function sleep(millis) {
    return new Promise(resolve => {
        setTimeout(() => {
            resolve();
        }, millis);
    });
}

/** 
 * let t = Date.now()
 * sleep(100).then(() => console.log(Date.now() - t)) // 100
 */