此函数可能是回调在这段代码中做什么?

问题描述

因此,三天后,我开始了解实际上是什么回调函数,只是遇到以下代码

const timeFuncRuntime = funcParameter => {

    let t1 = 120;
    
    funcParameter();
    
    let t2 = 200;
    
    return t2 - t1;
    
}
    
const addOnetoOne = () => 1 + 1;
    
timeFuncRuntime(addOnetoOne);
    
console.log(timeFuncRuntime(addOnetoOne))

仅用我三个月的JS经验(我什么都不知道),我可以在这代码中告诉我们“ timeFuncRuntime(addOnetoOne);”。另一个函数被传递为参数“ addOnetoOne”,但是,我不明白它在这里实际做什么?在那有什么意义?

在最后一行中,当调用函数并传递另一个函数作为参数时,该函数(可能就是所谓的回调函数)返回1 + 1 = 2,但是,它只是返回而我没有认为没有必要,还是存在?

在第一个箭头函数中,使用一个回调函数(我认为这是一个回调)声明了两个具有不同值的局部变量,那么那个回调函数在那里做什么?

解决方法

此代码似乎都没用。

  • 传递的函数是纯函数,但从未使用过它的结果,因此它没有做任何有意义的事情。
  • 包装器timeFuncRuntime将始终返回80,这也不是很有用。

这意味着这段代码基本上等同于:

console.log(80)

只需进行额外的处理。


此代码可能试图显示对Higher Order Functions的使用,但效果不是很有效。 t2 - t1似乎试图显示您如何编写基准测试功能,但是它们以数字进行了硬编码,从而无法达到目的。

研究mapreduce之类的函数,以获得更好的示例说明为什么要传递函数。


他们可能想要的是这样的东西:

const benchmark = (f) => {
    let t1 = Date.now();
    f();
    let t2 = Date.now();
    return t2 - t1;
}

然后您可以做:

let t = benchmark(() => {
    // Something expensive
    for(let i = 0; i < 100000; i++) {
        let d = new Date()
    }
});

// Prints how long it took the function to execute.
// A number around 50 for me.
console.log(t);