在函数内重复内联与函数的关系?

时间:2014-01-22 22:00:58

标签: javascript function parameters operators wrapper

我有一种情况,我正在编写多个共享工作方法的函数,并且非常希望重构和整理这些代码,而不是让这些相同的块无数次地执行,只是为了执行细微的差异。给定一个信息块,我扫描每个条目并对相关块执行操作。循环功能的一个例子如下:

    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:如何在函数中使用函数调用来包装它在成为单独函数之前执行的原始代码块操作?

1 个答案:

答案 0 :(得分:0)

“更快”示例中的

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);
}