2017-04-13 259 views
-1

我有一個當前遞歸的問題。當我登錄this.memb和this.child時,這兩個值是相同的。但是,它不應該是一個案例。 this.child理論上應該是this.memb的孩子。Javascript:用for循環遞歸

buildGraphNode(treeNode){ 
    if(!(treeNode.data instanceof Array)){ 
     this.memb = this.member("" + treeNode.label, "" + treeNode.label, 'images/user1.png', '#d0000c', '', 'B'); 
     this.members.push(this.memb); 
    } 
    for (var i = 0; i<treeNode.children.length; i++) { 
     this.child = this.buildGraphNode(treeNode.children[i]); 

     if(this.child != null && this.memb !=null){ 
     console.log(this.memb); 
     console.log(this.child); 
     this.connections.push(this.link(this.memb,this.child)); 
     } 
    } 
    return this.memb; 
} 

回答

0

您正在使用對「this」的過度引用。您正在使用同一this對象,這將最終修改外部環境。嘗試使用局部變量來代替:

buildGraphNode(treeNode){ 
    if(!(treeNode.data instanceof Array)){ 
     var memb = this.member("" + treeNode.label, "" + treeNode.label, 'images/user1.png', '#d0000c', '', 'B'); 
     this.members.push(memb); 
    } 
    for (var i = 0; i<treeNode.children.length; i++) { 
     var child = this.buildGraphNode(treeNode.children[i]); 

     if(child != null && memb !=null){ 
     console.log(memb); 
     console.log(child); 
     this.connections.push(link(memb,child)); 
     } 
    } 
    return memb; 
} 

我不知道你是如何構建的代碼,所以可能會有一些需要改變的this其他事件。

+0

如果沒有'var','const'或'let'你正在創建全局變量! – Sylwester

+0

這個。都是全局變量。 (這是Angular2組件) – Dino

+0

如果我在函數內部創建這些變量。它不會通過if(child!= null)&& memb!= null),因爲一個變量將始終未被設置。 – Dino