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作为您的答案