3

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

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

    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)();

在这种情况下,我不认为匿名函数是监视表达式中的闭包。在匿名函数的情况下,哪个对象存储闭包?

4

1 回答 1

3

它与是否命名内部函数无关。

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

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

于 2013-01-23T22:53:29.433 回答