考虑以下代码:
function f1(p) {
function f2() {
console.log(p); //Output: 10
}
f2();
}
f1(10);
此代码输出为10.但如果我将其更改为以下代码:
function f1(p) {
function f2() {
debugger;
}
f2();
}
f1(10);
当我在控制台中调试代码时,如果我尝试读取p,我得到:
ReferenceError: p is not defined
为什么会这样?
答案 0 :(得分:1)
p
中访问 f2
,但由于您没有使用p
,因此p
之后,解释器/编译器会因性能问题删除f1
{{1}}声明和解析完成。
答案 1 :(得分:0)
我怀疑主机没有将所有可能的变量放在闭包中,因为您可能会尝试在调试器中访问它们。相反,如果在内部函数中没有访问p
,它就不会进入闭包而且无法访问。