变量仅在调试

时间:2015-11-16 12:27:01

标签: javascript ajax

我的问题有点奇怪,我有以下示例代码:

window.test = function (number) {
    $.ajax({
        url: "/test",
        success: function () {
            // console.log(number);
            console.log("test");
        },
        error: function () {
            // console.log(number);
            console.log("test");
        }
    });
};

test(5);

我真的不在乎AJAX调用是否成功/错误,但是我使用开发工具在每个console.log语句中放置一个断点,然后使用开发工具我尝试通过悬停它或直接输入" number"来检查数字的值。进入控制台。

在所有情况下,我得到"未定义"

但是,如果我删除了注释行,则会打印ofc 5,当我停在断点处时,#34; number"已定义且具有正确的值。

问题是..为什么?

据我所知,每个函数都应该可以访问其父作用域变量,因此成功/错误函数应该可以访问数字。

我最好的猜测是,因为一个AJAX调用被触发,当浏览器进入回调"数字"可能是由浏览器GC收集的。

1 个答案:

答案 0 :(得分:1)

当您从回调函数中注释掉使用number的语句时,这些函数中不再使用该变量。

successerror函数不会关闭number,因为它们不会尝试访问它(并且JavaScript编译器可以检测到它)。

因此,当test函数完成时,number变量被标记为垃圾回收,而不能用于successerror(不需要它) 。这在successerror运行之前发生(并且您在调试器中测试number的值)。