在我的项目中,我必须进行一些双深度循环过程(多次)。我必须这样做:
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();
你能帮我解决一下这种方法吗?或者它根本无法完成?任何想法或建议将不胜感激。提前谢谢。
答案 0 :(得分:0)
您可以使用内部函数来完成您所描述的内容,因此,如果函数traverse
采用基于函数A
,B
和C
的参数得到定义,通过在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.
}