我有一个情况,我正在编写共享一种工作方法的多个功能,并且真的想重构和整理此代码,而不是让这些相同的块仅发生无数次执行轻微差异。给定信息块,我扫描每个条目并在相关块上执行操作。复发函数的一个示例如下:
function basicFunc() {
var totalX = 2000, totalY = 2000;
for (var y = 0; y < totalY; y++) {
for (var x = 0; x < totalX; x++) {
/* Fake operation for theory */
var fakeVar = (y * x);
}
}
};
比较:
function eachBlock(whatToDo, totalX, totalY) {
for (var y = 0; y < totalY; y++) {
for (var x = 0; x < totalX; x++) {
/* Fake operation for theory */
return whatToDo;
}
}
};
function basicFunc() {
var totalX = 2000, totalY = 2000;
eachoBlock("var fakeVar = (y * x)", totalX, totalY);
};
这可以通过whatToDo
参数传递单行。您将如何将多行传递到eachBlock()
,说如果您有一堆操作要做,而不是一个var FakeVar
操作?
tldr:如何在函数中使用函数调用来包装它在成为单独函数之前执行的代码操作的原始块?
return whatToDo;
在您的"更快"示例中,会导致两个循环立即跳过,并退出功能。它们没有相同的效果,因此您的基准不适用。
无论如何,如何做:传递函数,调用函数。JavaScript中没有巨大的区别,这是其最有用的功能之一。
function eachBlock(whatToDo, totalX, totalY) {
for (var y = 0; y < totalY; y++) {
for (var x = 0; x < totalX; x++) {
/* Fake operation for theory */
whatToDo(y, x);
}
}
}
function basicFunc() {
var totalX = 2000, totalY = 2000;
eachoBlock(function(y, x) {
var fakeVar = (y * x);
…
}, totalX, totalY);
}