我有以下代码:
function f() {
//...do stuff with arguments
//and return something...
}
f(root,
f(child1),
f(child2,
f(subchild1),
....
),
);
我想知道何时调用'f'的根级别,因此我引入了一个标志作为参数:
f(root, '-r',
f(child1),
f(child2),
//...
)
我的问题是:是否有一种方法可以知道何时在顶级“ f(root,...)”上调用“ f”而不添加其他参数?
答案 0 :(得分:5)
不,您无法在f
中的代码中告知其返回值并未用于为以后对f
的调用构建参数列表。 (或者,实际上,它的返回值已用于或未用于任何特定事物,或根本不用于任何事物。)这不是一个不合理的问题,但是f
不能使用该信息。>
答案 1 :(得分:0)
您实际上可以使用f.caller
并检查它是否为null
;但由于尾部调用优化,因此在“严格模式”中被禁止:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/caller
此外,这对于您的代码类型将是不可靠的:理想情况下,您不需要在root
和children
之间进行这种类型的分支(例如,请参见诸如DOM或超脚本`)。
通常,如果您有一个f
函数而不是返回树节点,则在什么级别上调用都无关紧要。例如:
let subchild = f(subchild1)
f(root,
f(child1),
f(child2, subchild),
....
),
);
这应该返回代码的相同结构,但是如果您将检查调用者,则不会,因为f(subchild1)
将与f(root)
相同。