具有与参数相同功能的函数调用顺序。 Java脚本

时间:2018-07-18 10:52:37

标签: javascript function

我有以下代码:

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”而不添加其他参数?

2 个答案:

答案 0 :(得分:5)

不,您无法在f中的代码中告知其返回值并未用于为以后对f的调用构建参数列表。 (或者,实际上,它的返回值已用于或未用于任何特定事物,或根本不用于任何事物。)这不是一个不合理的问题,但是f不能使用该信息。

答案 1 :(得分:0)

您实际上可以使用f.caller并检查它是否为null;但由于尾部调用优化,因此在“严格模式”中被禁止:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/caller

此外,这对于您的代码类型将是不可靠的:理想情况下,您不需要在rootchildren之间进行这种类型的分支(例如,请参见诸如DOM或超脚本`)。

通常,如果您有一个f函数而不是返回树节点,则在什么级别上调用都无关紧要。例如:

let subchild = f(subchild1)

f(root,
    f(child1),
    f(child2, subchild),
        .... 
    ),
);

这应该返回代码的相同结构,但是如果您将检查调用者,则不会,因为f(subchild1)将与f(root)相同。