【发布时间】:2014-02-13 05:14:19
【问题描述】:
我有一种情况,我正在编写多个共享一种工作方法的函数,并且我真的很想重构和整理这段代码,而不是让这些相同的块无数次出现,只是为了执行细微的差异。给定一个信息块,我扫描每个条目并对相关块执行操作。循环函数的一个例子如下:
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:如何在函数中使用函数调用来包装它在成为单独函数之前执行的原始代码块?
【问题讨论】:
-
顺便说一句,块(例如函数体)之后不需要分号。
-
你为什么不简单地传递一个函数
whatToDo而不是一个字符串'full of operations'? -
这正是我在 Tyblitz 得到的要点。我不知道这样做的最佳或正确做法。
-
哦!这很简单:您可以在 eachBlock 函数中包含一个未命名的函数(如 minitech 的答案),或者将您想要执行的操作存储在另一个命名函数中,就像您对 eachBlock 所做的那样。像这样:
1) function whatToDo1() { var fakeVar = (y * x); }2) eachBlock(whatToDo1, 2000, 200)这样做的唯一(也是很大)好处是可读性 - 注意:您的代码根本没有错误,它的格式很好(除了您在这个问题中提出的问题)
标签: javascript function parameters operators wrapper