浏览器控制台中的变量 [[FunctionLocation]]、[[Scopes]]: 是什么

joe*_*not 5 ajax jqxhr jquery-ajax

使用 jQuery Ajax 时,在浏览器控制台中,我可以看到 xhr 对象有两个 props/字段,采用一些奇怪的符号 [双方括号,在这种情况下不认为它意味着数组];

\n

首先,它们到底是什么,其次,我可以从 JavaScript 代码访问这些值吗?

\n
[[FunctionLocation]]: jquery-3.3.1.min.js:2\n[[Scopes]]: Scopes[4]\n0: Closure (w.Callbacks) {e: {\xe2\x80\xa6}, t: undefined, n: "", r: undefined, i: Array(0), \xe2\x80\xa6}\n1: Closure {e: Window, r: document, i: \xc6\x92, o: \xc6\x92, a: \xc6\x92, \xe2\x80\xa6}\n2: Script {loc: Location, baseRestURL: "http://localhost:60123/MyVirtualDir"}\n3: Global {parent: Window, opener: null, top: Window, length: 0, frames: Window, \xe2\x80\xa6}\n
Run Code Online (Sandbox Code Playgroud)\n

在此输入图像描述

\n

Rid*_*ain 3

不,您无法在代码中访问它们。

您在 Inspector 中看到的 [[FunctionLocation]] 属性被添加到调试器的 C++ 代码中的 V8Debugger::internalProperties() 中,该代码使用另一个 C++ 函数 V8Debugger::functionLocation() 来收集有关该函数的信息。functionLocation() 然后使用许多特定于 V8 的 C++ API(例如 v8::Function::GetScriptLineNumber() 和 GetScriptColumnNumber())来查找确切的信息。上述所有 API 仅供 C++ 代码使用,而非 JavaScript 代码。如果您尝试在 Node.js 这样的平台中完成此任务,那么您应该能够编写本机模块。如果没有,那么你就不走运了。

这里 回答了另一个类似的问题

[[Scopes]] 是 Chrome 开发人员工具在 C++ 内部添加和使用的私有属性,位于源代码 中。它显示函数范围内的变量,即可以从该函数访问哪些变量。