Meow~

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

 首先说一下这个问题是怎么产生的:今天看排序算法,想要比较不同的排序算法的时间花费。

最简单的时间统计方法是在程序块开始和结束时分别计时,求一下时间差就能得出该段代码的耗时。

如:

var foo = function (a, b) {
    return a + b
}

var t1 = new Date()
foo(1, 2)
console.log("cost time:", new Date() - t1)

但是这样有个缺点就是,每测试一个函数,都要写一遍

var t1 = new Date()
.......
console.log("cost time:", new Date() - t1)

于是就想写一个函数,可以对被调用的函数性能进行测试。

var foo = function () {
    console.log("foo")
}

var timer = function (bar) {
    var t1 = new Date()
    var res = bar()
    console.log("cost time:", new Date() - t1)
    return res
}

timer(foo)

但是这样存在一个问题,如果foo本身是携带参数的,我们该如何传入它的参数呢?

var foo = function (a, b) {
    console.log(a + b)
}

var timer = function () {
    var t1 = new Date()
    var res = this.apply(null, arguments)
    console.log("cost time:", new Date() - t1)
    return res
}

timer.call(foo, 1, 2)

其中,call里面第一个参数就是我们要调用的函数,后面的参数就是对应被调函数的参数。这样就实现了函数作为另一函数的参数的功能!

 

posted on 2017-09-25 13:12  喵弟  阅读(1157)  评论(0编辑  收藏  举报