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

Posted Meow~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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里面第一个参数就是我们要调用的函数,后面的参数就是对应被调函数的参数。这样就实现了函数作为另一函数的参数的功能!

 

以上是关于JavaScript把函数作为另一函数的参数的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript高阶函数

关于js中高阶函数的认识

JavaScript中怎样点击超链接后执行一个函数并且把超链接的文本作为函数的参数传递?

javascript基础函数4.1

JavaScript中的eval函数

JavaScript权威指南 - 函数