摘要两个深循环程序

时间:2014-11-22 13:31:25

标签: javascript traversal abstraction

在我的项目中,我必须进行一些双深度循环过程(多次)。我必须这样做:

for (var i = 0; i < length; i++) {
    something_here_maybe;
    for (var j = 0; j < second_length; j++) {
        something_else_here;
    }
    perhaps_other_thing_here;
}

现在我不想继续这样做,所以我试了一下:

function traverse(before, inside, after) {
    for (var i = 0; i < length; i++) {
        (before) ? before(i) : null;
        for (var j = 0; j < second_length; j++) {
            (inside) ? inside(i, j) : null;
        }
        (after) ? after(i) : null;
    }
}

当然,这似乎对我来说更合适,因为我认为我可以做类似的事情:

traverse(function(x) { blabla; }, function(x, y) { blabla; }, function(x) { blabla; });

Mbut ......我只是说到这三个功能需要彼此互动。它们中的变量是本地的 - 因此它们无法互动。我需要在traverse()中定义这些变量,但我事先并不知道我需要哪些变量。我试着定义另一个&#34;初始化&#34;遍历中的参数(作为第一个参数),它将是一个初始化这些值的函数。但它仍然是一个函数,这些变量仍然是本地的,不是由traverse();

你能帮我解决一下这种方法吗?或者它根本无法完成?任何想法或建议将不胜感激。提前谢谢。

1 个答案:

答案 0 :(得分:0)

您可以使用内部函数来完成您所描述的内容,因此,如果函数traverse采用基于函数ABC的参数得到定义,通过在traverse函数内部编写一个函数来定义它们,该函数返回三个函数作为它的返回值,(你可以返回一个包含三个函数的数组),然后调用循环中的三个函数。

示例:

function traverse(param) {

   function defineProcedures(args) {
      /* local vars which have function scope(visible to the entire defineProcedures 
         body
      */
     var funcA = function(params) { //blah };
     var funcB = function(params) { //blah };
     var funcC = function(params) { //blah };

      return [funcA, funcB, funcC];
  }
  var procs = defineProcedures(param);
  var firstFunc = procs[0],
      secondFunc = procs[1],
      thirdFunc = procs[2];

  //for loops go here and invoke the functions appropriately.

}