2014-11-22 4 views
0

내 프로젝트에서 몇 가지 (두 번 깊은 루프 프로 시저를 여러 번해야 의미합니다). ,일부 두 개의 깊은 루프 프로 시저를 추상화

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

물론, 그 날을 위해 훨씬 더 바람직 듯 :

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

지금 내가 그 일을 계속하고 싶지 않아, 그래서 몇 가지 시도 : 나는 동일한 작업을 수행해야합니다

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

Mbut ... 난 단지 그 세 가지 기능이 서로 상호 작용하는 데 필요한 지점에 도착 : 내가 뭔가를 할 수 있다고 생각 주어진. 그리고 그들에있는 변수는 지역적입니다 - 그래서 그들은 상호 작용할 수 없습니다. traverse()에서 이러한 변수를 정의해야하지만, 필요한 변수가 무엇인지 미리 알지 못합니다. 나는 다른 값을 정의하려고 시도 할 것이다. "initialize"매개 변수는 traverse에서 (첫 번째 인수로) 이들 값을 초기화하는 함수가 될 것이다. 그러나 그것은 여전히 ​​함수가 될 것이고, 그 변수들은 여전히 ​​traverse()에 의해 취해지지 않고 그것의 지역 변수 일 것이다.

이 방법에 대한 아이디어가 있습니까? 아니면 단순히 할 수 없습니까? 어떤 생각이나 충고라도 감사 할 것입니다. 미리 감사드립니다.

답변

0

당신이 설명하는 것을 달성하기 위해 내부 기능을 사용하므로, 기능 traverse이 기능 A, BC 정의 얻을하는 기반으로 매개 변수를 사용하는 경우, 반환 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. 

} 
+0

글쎄, 내 생각, 개념, 즉 일종의 좋은 것 내가 필요했던 것과. 그럼에도 불구하고 함수 "funcA", "funcB", "funcC"및 "param"의 매개 변수를 "param"매개 변수로 보내려면 어떻게해야합니까? 나는 정말로 그렇게 할 수있는 방법을 생각할 수 없다는 뜻입니다. 그럼에도 불구하고이 문제가 발생하지 않았다면 나는 진정으로 받아 들일 수있는 것으로 표시했습니다. –

+0

기능 범위가있는 local vars에 대한 주석 참조. 그들은 funcA, B 그리고 시체에서 접근 할 수 있습니다. – Hrishi