Javascript 调试:获取函数内绑定的变量的内容

Javascript 调试:获取函数内绑定的变量的内容,javascript,Javascript,我在函数中定义了一些函数,但设置为全局: function someFn(someVar) { var arr = makeArray(someVar); // global function: foo = function(bar) { return arr.indexOf(bar)==-1; } } 使用chrome控制台进行调试时: > foo function (bar){return arr.indexOf(bar)==-1;}

我在函数中定义了一些函数,但设置为全局:

function someFn(someVar) {
    var arr = makeArray(someVar);
    // global function:
    foo = function(bar) {
        return arr.indexOf(bar)==-1;
    }
}
使用chrome控制台进行调试时:

> foo
function (bar){return arr.indexOf(bar)==-1;}
我是否可以在不更改源代码的情况下获取
arr
的内容

假设我不能获取并执行生成
arr
的命令,因为我不知道
someVar
的最后一个值

变量必须在内存中的某个地方,因为当我调用函数时,它可以被访问,但它有什么名称?我已经试过了:

>  foo.arr
undefined

X-Y问题反应;我不知道您如何从控制台访问
arr
,但我可以给您一些通过断点进行调试的提示,即使代码已缩小

尝试使用Google Chrome,在Debugger中,单击代码窗口下方的
{}
图标。这将很好地打印脚本,尽管varnames仍将缩小。(
\u a1=新的
\u 43`等)

其次是阅读缩小代码的艺术;代码缩略器不能更改通过字符串访问的任何内容;其中大多数签名是对象属性(在
之后的任何内容)。这也有助于在没有空格的情况下,更容易找到特定的符号序列。您可以尝试使用CTRL-Fing来查找
.indexOf
==-1
等术语。如果这是一个实际的公司发布的库,那么您很有可能会超越您的小示例,参考
myCompanyLibrary.dockInstance.locator=
之类的内容


一旦找到那一行,就可以在那里设置断点。祝你好运

设置断点并在变量上添加一个手表。我同意它必须在内存中的某个位置,但它存储在特定的执行上下文下,这使得它更加困难;完全有可能有10个函数调用了
someFn
,每个函数都被授予一个单独的
arr
@Katana314的实例是的,它们有,但是除了最后一个之外,所有函数都可以被GC'ed,因为它们在任何地方都不再需要。然后,我调用的函数知道在哪里查找。我不知道。函数比我当时写的要聪明。Sooo saaad…首先,Javascript中模糊的安全性不是安全性,因为分解代码就像将代码扔进JSBeautifier一样简单。其次,您可以在缩小的文件中添加断点,只需在Chrome的inspector中按源文件左下角的
{}
按钮,即可自动格式化文件以供预览。点击一个按钮就是你的缩小来源给你的“安全性”。我从他写“你知道”的方式中得到的印象是,他完全知道它给你带来了多大的安全性,但他并不负责糟糕的决策=pWhy你不能掩盖字符串访问的东西吗?那是胡说八道。例如,
[1,2,3]['\u0069\u006e\u0064\u0065\u0078\u004f\u0066'](2)
翻译成
[1,2,3],并与之相同;事实上,我不认为这些是经常使用的。代码缩微器不会执行您刚才描述的操作,因为它会使代码变大,而不是变小。不能和不愿意之间有很大区别。您的答案是缩微器不能更改通过字符串访问的任何内容。这根本不是事实。上面的代码片段只是一个示例,您不局限于字符串文字,您可以轻松编写一个缩短调用的示例。正如我已经说过的,编写一个演示可以缩短字符串文字的示例非常简单。检测何时这样做是安全的,这是一个非常重要的问题,这就是为什么大多数最小化程序在默认情况下不这样做,但有些使用正确的标志,作为大小与速度之间的权衡。