Javascript 节点堆栈跟踪

Javascript 节点堆栈跟踪,javascript,node.js,v8,stack-trace,Javascript,Node.js,V8,Stack Trace,如果我执行以下代码: "use strict"; const config = {}; const run = (fn, params) => fn(params); run( params => { throw new Error("Simple test!"); }, { config } ); 我得到以下堆栈跟踪: Error: Simple test! at run.config.c

如果我执行以下代码:

"use strict";

const config = {};
const run = (fn, params) => fn(params);

run(
    params => {
        throw new Error("Simple test!");
    },
    { config }
);
我得到以下堆栈跟踪:

Error: Simple test!
    at run.config.config (C:\test\test.js:10:9)
    at run (C:\test\test.js:6:29)
    at Object.<anonymous> (C:\test\test.js:8:1)
    at Module._compile (internal/modules/cjs/loader.js:1133:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1153:10)
    at Module.load (internal/modules/cjs/loader.js:977:32)
    at Function.Module._load (internal/modules/cjs/loader.js:877:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)
    at internal/main/run_main_module.js:18:47
错误:简单测试!
在run.config.config(C:\test\test.js:10:9)
运行时(C:\test\test.js:6:29)
反对。(C:\test\test.js:8:1)
at模块编译(内部/modules/cjs/loader.js:1133:30)
at Object.Module._extensions..js(internal/modules/cjs/loader.js:1153:10)
at Module.load(内部/modules/cjs/loader.js:977:32)
at Function.Module._load(内部/modules/cjs/loader.js:877:14)
在Function.executeUserEntryPoint[作为runMain](internal/modules/run_main.js:74:12)
在internal/main/run_main_module.js:18:47

run.config.config
是正常的还是一个bug?

{config}
从原始
config
创建一个属性为
config
的对象

堆栈似乎是:
config
from参数
{config}
。因此,
run
中的“
run.{config}.config
”,显然显示为
run.config.config

如果
fn
更早分配(因此,当
fn
不是匿名时),堆栈跟踪不同

const-config={foo:1,bar:2};
常量运行=(fn,配置)=>{
fn(配置);
};
常量runFn=params=>{
log(`current params:${JSON.stringify(params)}`);
抛出新错误(“抓到你了”);
}
run(runFn,{config})
运行run.config.config是正常的还是一个bug

如果您指出不应该在堆栈跟踪中提到
config
对象,因为它与错误无关,那么是的,这很奇怪,另一方面,如果您想知道
config.config
,那么我怀疑:

多亏了 这:

常数a=1,b=2,c=3;
常量obj={a,b,c};
相当于:

常数a=1,b=2,c=3;
const obj={a:a,b:b,c:c};

以同样的方式,这:

run(参数=>{
抛出新错误(“简单测试!”);
},
{config}
);
相当于:

run(参数=>{
抛出新错误(“简单测试!”);
},
{config:config}
);

这可以解释
config.config
部分,第一个
config
似乎指的是对象
{config:config}
,第二个(
.config
)指的是所提到对象的
config
属性名这看起来确实很奇怪。节点似乎为传递给
run
的匿名回调派生了一个名称,不知道它是如何到达
config
的。我想
{config}
在原始
config
中创建了一个新的
config
属性,我可以在Chrome devtools控制台中重现它,所以它可能是一个V8thing@KooiInc不这只是一个对象文本,只有一个属性保存
config
对象。未修改
config
对象。无论如何,这并不能回答为什么DV的堆栈traceno中会出现
config
对象,但不确定这是否真的回答了这个问题。但是对
fn
的调用与config参数有什么关系?不确定,但请查看编辑后的答案。“奇怪”错误仅在
fn
内联时显示,因此当
fn
为匿名时显示。在这种情况下,我假设取了
fn
的父名称,并从v8解释器中进行了一些奇怪的猜测。但是,如果您使用
{config:config}
尝试代码,则在堆栈跟踪中只会得到
run.config