Nashorn

时间:2016-05-12 16:18:18

标签: javascript java stack-trace nashorn

我有以下代码:

var f = (function() {
    return function foo() {
        try {
            throw new Error();
        } catch(e) {
            print(e.stack);
        }
    }
})();

当我调用该函数(在jjs中)时,我按预期得到以下堆栈跟踪 (大多数情况下;我期待foo代替f$foo)。

Error
        at f$foo (<shell>:1)
        at <program> (<shell>:1)

但是,如果我按如下方式动态构造函数:

var f = new Function([], "return function foo() { try { throw new Error();
} catch(e) { print(e.stack); } }")()

我明白了:

Error
        at <anonymous> (<function>:2)
        at <program> (<shell>:1)

这种差异是否有原因?另外,为什么在第一种情况下f$foo而不是foo

我正在运行jdk8u92。在chrome上运行它会给我预期的堆栈跟踪(在这两种情况下都使用foo作为函数的名称)。

0 个答案:

没有答案