我有以下代码:
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
作为函数的名称)。