如何在chrome调试器中找到匿名函数的闭包?

时间:2013-01-23 22:38:29

标签: javascript google-chrome

调试时,在匿名函数的情况下,我在哪里找到闭包?

在非匿名功能的情况下,它似乎出现在“功能范围”下。例如:

    function outer(x){
    var temp = 0;
    return function inner(){
        alert(++x);
    };
    }
    var out = outer(3);
    out();
    debugger;
    out = outer(5);
    out();

在这种情况下,我可以在观看表达式“out”中看到closure_in_functionalscope

但是,当我使用匿名函数时,如下所示:

    function outer(x){
    var temp = 0;
    return function (){
        alert(++x);
    };
    }
    outer(3)();
    debugger;
    outer(5)();

在这种情况下,我没有在监视表达式中看到anonymous function作为闭包。在匿名函数的情况下,哪个对象存储闭包?

1 个答案:

答案 0 :(得分:3)

它与被命名的内部函数无关。

在第一个屏幕截图中,您正在检查out变量,该变量引用了返回但outer的函数。该函数在其闭包范围内有x

在第二个屏幕截图中,您正在检查引用命名全局函数的outer变量。在该代码段中,您没有任何变量来引用结果或outer(3)。如果您将其分配给变量,就像在第一个示例var out = outer(3)中一样,并在该分配后放置断点,那么您将能够看到out的闭包范围。或者,你可以通过添加一个"监视表达式来检查它。调试器中的outer(3),而无需修改代码。