2015-05-27 47 views
2

我有一個循環,其中我有一個不返回和停止的遞歸函數。這裏是代碼javascript遞歸循環返回語句不工作

var obj = { 
    here: { is: "an" }, 
    object: 2 
}; 
var obj1 = { 
    here: { is: "aan" }, 
    object: 2 
}; 
function objectTester(x) { 
    if (typeof x === 'object' && x !== null) 
     return true; 
    else 
     return false; 
} 

function deepEqual(valOne, valTwo) { 
    debugger 
    if (objectTester(valOne) && objectTester(valTwo)) { 
     for (key in valOne) { 
      if (valTwo.hasOwnProperty(key)) { 
       if (objectTester(valOne[key]) && objectTester(valTwo[key])) { 
        deepEqual(valOne[key], valTwo[key]); 
       } 
       else { 
        if (valOne[key] === valTwo[key]) { 
        } 
        else { 

         return false;  //function dose not stop executing and return false 
        } 

       } 

      } 
      else { 

       return false; 
      } 
     } 
     return true; 
    } 
    else { 

     return false; 
    } 
} 
console.log(deepEqual(obj, obj1)); 

Link

回答

3

當你調用deepEqual遞歸這裏:

if (objectTester(valOne[key]) && objectTester(valTwo[key])) { 
    deepEqual(valOne[key], valTwo[key]); 
} 

你這麼它對一切會循環不論內的對象忽略從遞歸調用的返回值平等與否。

嘗試

if(!deepEqual(valOne[key], valTwo[key])){ return false } 

另一種選擇是拋出一個異常(並在頂部醒目的話),而不是返回布爾值。無論您有多少遞歸級別,這都會使您的控制流程直接跳出。