在控制台中访问闭包变量

Pab*_*blo 11 google-chrome

鉴于此代码

function foo()
{
    var x = 1;

    function bar()
    {
        debugger;
        return x + 1;
    }

    return bar();
}
Run Code Online (Sandbox Code Playgroud)

当我打开谷歌Chrome控制台并foo()执行时,控制台就会停在该debugger线上.如果我在控制台中输入'x',我会得到Uncaught ReferenceError:x未定义.

如果我想x在控制台中访问,我有两个选择:

  • Source下转到Scope,打开Closure,右键单击x并单击Store as Global Variable.这将创建一个temp1我可以访问的全局变量x.
  • 编辑bar

    function var()
    {
        x;
        debugger;
        return x + 1;
    }
    
    Run Code Online (Sandbox Code Playgroud)

我注意到当你把a debugger和代码在某个时刻访问了一个范围变量时,我可以在控制台中访问它.

我发现像这样的其他线程或多或少都有同样的问题.有没有更好的方法来访问闭包变量?

顺便说一句,我Version 59.0.3071.104 (Official Build) (64-bit)用于Debian 8.

Mar*_*hal 1

我相信您已经在您提到的其他线程中得到了答案。@OwnageIsMagic 说这是因为 V8 优化。如果单击“调用堆栈”中的函数名称,则可以访问该变量。