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

时间:2014-02-15 11:20:31

标签: javascript

考虑以下代码:

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

为什么会这样?

2 个答案:

答案 0 :(得分:1)

可以在p中访问

f2,但由于您没有使用p,因此p之后,解释器/编译器会因性能问题删除f1 {{1}}声明和解析完成。

答案 1 :(得分:0)

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