【发布时间】:2015-10-21 19:52:22
【问题描述】:
我有一个递归函数,它返回树的叶子节点(以嵌套对象的形式):
var retrieve = function (a)
{
if (typeof retrieve.names == 'undefined') //would be true for the 1st pass only
retrieve.names = []
if (a.left != null)
retrieve (a.left)
if (a.right != null)
retrieve (a.right)
if (a.left == null && a.right == null)
retrieve.names.push(a)
return retrieve.names
}
这个函数的问题是,它对单个对象(树)工作得很好,但是当另一个对象传入参数时,它只是简单地将叶子节点附加到已经从前一棵树获得的叶子节点上。
例如,
// gets the leaf nodes of obj1 tree
obj1_leaves = retrieve(obj1)
// instead of only getting leaf nodes of obj2, it appends them to leaf nodes of obj1
obj2_leaves = retrieve(obj2)
现在typeof retrieve.names == 'undefined' 的原因只是第一次是真的。每当再次调用此函数时,retrieve 函数的成员 names(也可以视为对象)已经设置/初始化。
有没有办法只为给定的函数调用在递归函数内设置变量(或对象的成员),然后为另一个函数调用再次取消设置/设置它。
【问题讨论】:
-
是的。只是不要让它成为静态的。
-
我感觉你实际上想要使用两个函数。
标签: javascript recursion static-members