装饰器模式,统计函数耗时

装饰器模式允许我们在不影响原函数的前提下扩展一个函数的功能,装饰后的函数调用接口与返回数据都应保持一致。

剩余与展开语法使得我们可以接收任意参数,并展开至原函数,这意味着装饰器可以匹配任意参数的函数。

以下实现了一个统计函数耗时的装饰器。

$$jsdemo$$
$$edit$$
function loop(a, b) {
    // 在 a,b 区间内循环并返回它们的减值

    for (let i = a; i <= b; i++) {
        console.log(i)
    }
    return b - a
}

function UsageTime(func) {
    // 计算函数的耗时
    // 又不影响原功能
    return function wrapper(...args) {
        // 使用剩余语法
        // 接受任意多个参数值
        // 使得可以适合任意函数

        console.log("进入时确认:")

        // 开始的时间戳
        let begin = new Date().getTime()

        // 展开接收到的参数至原函数
        let result = func(...args)

        // 结束的时间戳
        let end = new Date().getTime()

        console.log(`执行耗时${end - begin}毫秒`)

        console.log("结束时确认:")
        return result
    }
}

let newLoop = UsageTime(loop)

let result = newLoop(100, 1000)
console.log(result)