Javascript闭包行为在运行时很奇怪

Javascript闭包行为在运行时很奇怪,javascript,Javascript,考虑以下代码: function f1(p) { function f2() { console.log(p); //Output: 10 } f2(); } f1(10); 此代码输出为10。但如果我将其更改为以下代码: function f1(p) { function f2() { debugger; } f2(); } f1(10); 在console中调试代码时,如果我尝试读取p,我会得到: Ref

考虑以下代码:

function f1(p) {
    function f2() {
        console.log(p); //Output: 10
    }
    f2();
}

f1(10);
此代码输出为10。但如果我将其更改为以下代码:

function f1(p) {
    function f2() {
        debugger;
    }
    f2();
}

f1(10);
在console中调试代码时,如果我尝试读取p,我会得到:

ReferenceError: p is not defined

为什么会发生这种情况?

我怀疑主机没有将所有可能的变量放入闭包中,只是因为您可能试图在调试器中访问它们。相反,如果未在内部函数中访问
p
,则它不会进入闭包且不可访问。

p
可在
f2
中访问,但因为您未使用
p
,在
f1
声明和解析完成后,
p
似乎因性能问题被解释器/编译器删除。

我不想让它工作。当控制台在调试器行停止时,如果您试图在控制台中读取p,您将得到引用错误。@MohammadZargarani如果编辑仅用于纠正1个打字错误,请不要建议使用同义词替换其他单词的编辑(例如,不要使用do-not),但是请留下评论。@Sumurai8谢谢你的关心,但我认为纠正别人不会让你担心!祝你度过愉快的一天:)@MohammadZargarani因为你建议编辑,而我在评论队列中遇到了它,我觉得我需要解释一下。通常这些编辑都会因为“太小”而被拒绝。@Omid+1作为您的答案