JavaScript把函数作为另一函数的参数

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

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

如:

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里面第一个参数就是我们要调用的函数,后面的参数就是对应被调函数的参数。这样就实现了函数作为另一函数的参数的功能!

上一篇:JSON数据解析(GSON方式) (转)


下一篇:unity自定义菜单面板开发