我遇到的情况是,我正在编写共享工作方法的多个函数,并且真的很想重构和整理此代码,而不是让这些相同的 block 出现无数次只是为了执行细微的差异。给定一个信息 block ,我扫描每个条目并对相关 block 执行操作。循环函数的例子如下:
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
参数传递来说效果很好。假设您有一堆操作要做,而不是一个 var FakeVar
操作,您将如何将多行传递给 eachBlock()
?
TLDR:如何在函数中使用函数调用来包装其在成为单独函数之前执行的原始代码操作 block ?
最佳答案
在“更快”的示例中,
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);
}
关于javascript - 循环内联与函数内函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21294912/