2012-02-29 50 views
0

我不知道什么是错的:后无返回值第二+迭代

 var get_depth = function(item, depth) { 
     if(item.parent_id !== null) { 
      get_depth(get_item_by_id(item.parent_id),depth+1); 
     } else { 
      alert ("return: " + depth); 
      return depth; 
     } 
     }; 

警报消息总是抛出一个正确的深度,但变量在那里我想有存储在值只接受一次迭代(返回值= 1)经过两次或多次迭代后,我的变量的值未定义。我不明白这个。

+0

你是如何调用它的第一次? – mindandmedia 2012-02-29 09:54:35

回答

0

那是因为你应该每次都返回值:

var get_depth = function(item, depth) { 
     if(item.parent_id !== null) { 
      return get_depth(get_item_by_id(item.parent_id),depth+1); 
     } else { 
      alert ("return: " + depth); 
      return depth; 
     } 
     }; 
2

你缺少回报。

var get_depth = function(item, depth) { 
     if(item.parent_id !== null) { 
      return get_depth(get_item_by_id(item.parent_id),depth+1); 
     } else { 
      alert ("return: " + depth); 
      return depth; 
     } 
     }; 

为什么你不使用这种语法?我觉得更容易经历:

function get_depth(item, depth) { 
    if(item.parent_id !== null) { 
    return get_depth(get_item_by_id(item.parent_id),depth+1); 
    } else { 
    alert ("return: " + depth); 
    return depth; 
    } 
} 
+0

嘿,谢谢你!它的工作原理,虽然我不太了解这个说法。 – David 2012-02-29 10:02:16

+0

嗯......我没有看到任何区别。我把它放在一个var get_depth中,以保持我的源代码清洁。它是一个方法调用作为对象的一部分。 – David 2012-02-29 10:07:19

+0

我明白了,这可能只是一个习惯问题。方法可以是对象的一部分,即使它没有被声明为变量。但正如我所说,两者都很好。 – 2012-02-29 10:15:01