调试时,在匿名函数的情况下,我在哪里找到闭包?
在非匿名功能的情况下,它似乎出现在“功能范围”下。例如:
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作为闭包。在匿名函数的情况下,哪个对象存储闭包?
答案 0 :(得分:3)
它与被命名的内部函数无关。
在第一个屏幕截图中,您正在检查out
变量,该变量引用了返回但outer
的函数。该函数在其闭包范围内有x
。
在第二个屏幕截图中,您正在检查引用命名全局函数的outer
变量。在该代码段中,您没有任何变量来引用结果或outer(3)
。如果您将其分配给变量,就像在第一个示例var out = outer(3)
中一样,并在该分配后放置断点,那么您将能够看到out
的闭包范围。或者,你可以通过添加一个"监视表达式来检查它。调试器中的outer(3)
,而无需修改代码。