【发布时间】:2018-11-05 15:21:33
【问题描述】:
我目前正在为 JavaScript(我还没有进入)应用程序开发日志接口,我想知道是否可以在 JS 中跟踪函数范围。
在 C++ 中我可以做某事。喜欢
int some_function(int arg1) {
function_tracer(__PRETTY_FUNCTION__);
do_something();
}
它适用于RAII idiom,在 Python 中我会使用装饰器:
@function_tracer
def some_function(arg1)
do_something()
这两种方法都可以感知函数范围(至少在某种程度上),与上述 enter_scope() / leave_scope() 方法相比具有以下优势:
- 我根本不用写
leave()-Call - 多个
return语句不需要多个leave()调用 - 最重要的是:它是异常安全的!
如何在 JavaScript 中做到这一点?我发现的示例将要跟踪的函数作为包装函数的参数(如 Python 中的装饰器)。
这是在 JavaScript 中执行此操作的唯一方法吗?
你的方法是什么?
【问题讨论】:
-
您到底想达到什么目的?如果要访问 Function 调用的堆栈,在大多数浏览器上,Error 对象上都有一个非标准的
.stack属性,因此您可以通过new Error('trace').stack将其作为字符串访问,但没有标准化格式。 .
标签: javascript function scope trace