在控制台中访问闭包变量

时间:2017-06-19 15:19:10

标签: google-chrome

鉴于此代码

function foo()
{
    var x = 1;

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

    return bar();
}

当我打开Goog​​le Chrome控制台并且foo()被执行时,控制台将停在debugger行。如果我输入' x'在控制台中,我得到未捕获的ReferenceError:x未定义

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

  • 来源下,转到范围,打开关闭,右键点击x,然后点击存储为全局变量。这将创建一个全局变量temp1,我可以通过该变量访问x
  • bar修改为

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

我注意到当你放一个debugger并且代码在某个时刻访问了一个范围变量时,我可以在控制台中访问它。

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

顺便说一句,我使用Version 59.0.3071.104 (Official Build) (64-bit)作为Debian 8。

1 个答案:

答案 0 :(得分:0)

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