gpt4 book ai didi

javascript - 有人可以解释一下这个传递的函数是如何返回和调用的吗? - JavaScript

转载 作者:行者123 更新时间:2023-12-01 04:06:55 24 4
gpt4 key购买 nike

我正在阅读一篇有关包装函数的文章,并遇到了这个示例,它展示了如何包装函数以确定其性能。

function profile(func, funcName) {
return function () {
var start = new Date(),
returnVal = func.apply(this, arguments),
end = new Date(),
duration = stop.getTime() - start.getTime();

console.log(`${funcName} took ${duration} ms to execute`);
return returnVal;
};
}

var profiledMax = profile(Math.max, 'Math.max');
profiledMax.call(Math, 1, 2);
// => "Math.max took 2 ms to execute"

我对这些行感到困惑:

returnVal = func.apply(this, arguments),

和:

return returnVal;

我的看法是,当你调用 profile(Math.max...) 时,它将返回一个匿名函数,那么为什么可以使用参数调用该匿名函数呢?我本以为你需要返回然后调用那个匿名函数来访问 returnVal,它也是一个函数?像这样:

var profiledMax = profile(Math.max, 'Math.max');
var moreProfiledMax = profiledMax();
moreProfiledMax.call(Math, 1,2)

最佳答案

好吧,这很简单,首先你得到这个包装另一个函数的函数

function profile(func, funcName) {
return function () {
var start = new Date()**;**
returnVal = func.apply(this, arguments)**;**
end = new Date()**;**
duration = stop.getTime() - start.getTime();

console.log(`${funcName} took ${duration} ms to execute`);
return returnVal;
};
}

这一行:

var profiledMax = profile(Math.max, 'Math.max');

执行外部函数,传递给它的参数,这些参数将保存在外部函数定义的内部函数的范围内。最后返回内部函数,就像您有一样:

 var profiledMax =  function () {
var start = new Date();
returnVal = **Math.max**.apply(this, arguments);
end = new Date();
duration = stop.getTime() - start.getTime();

console.log(`${funcName} took ${duration} ms to execute`);
return returnVal;
}

然后这一行:

profiledMax.call(Math, 1, 2);

执行profiledMax,传递2个参数(您可以将参数传递给JS中的任何函数)并将this关键字绑定(bind)到Math对象,就像执行此函数一样:

function () {
var start = new Date(),
returnVal = Math.max.apply(**Math**, arguments),
end = new Date(),
duration = stop.getTime() - start.getTime();

console.log(`${funcName} took ${duration} ms to execute`);
return returnVal;
};

你的提案的问题是当你这样做时:var moreProfiledMax = profiledMax();returnVal = func.apply(this,arguments);将会中断,因为func 不会存在于作用域中。

关于javascript - 有人可以解释一下这个传递的函数是如何返回和调用的吗? - JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41742411/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com