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

  • 相关阅读:
    Day4-装饰器
    Day3-递归函数、高阶函数、匿名函数
    Day3-函数及作用域
    Day2-字符编码转换
    Day2-文件操作
    Day2-列表、字符串、字典、集合
    Day1-模块初识
    JavaScript 笔试题
    从JavaScript 数组去重谈性能优化
    prototype
  • 原文地址:https://www.cnblogs.com/miaodi/p/7591399.html
Copyright © 2011-2022 走看看