ajax调用后,一个变量丢失了。另一个发现

时间:2017-01-03 08:16:10

标签: javascript jquery ajax

在函数内部运行以下代码:

 int num  = 5498
 int k  = 2
 int nDigit= 3

the result is num = 5398

当我在success函数中设置断点并尝试在控制台(Google Chrome)中调用变量“typeId”时,它会显示为未定义。但是,在Ajax调用之前定义的变量“workArea”仍然具有其值。这两个变量之间有什么区别呢?

1 个答案:

答案 0 :(得分:2)

了解JavaScript闭包的工作原理应该有所帮助:

只有内部函数使用的变量才会被放入闭包范围。

让我们看看以下示例:

long ms

这里外部函数'functionOne'有3个局部变量a,b和c。内部函数'functionTwo'可以访问所有这些变量,但是,这里实际上只使用'b',因此,当它由JavaScript引擎创建时,只有b将被放入闭包范围。这有助于减少内存占用。

如果你把调试点放在我在代码中提到的地方,并在你的控制台中输入'b',你将得到b的值,但是如果你输入'a'或'c',你就会得到未定义的。

如果你在内部函数'functionTwo'中添加'c'或'a'的用法,就像这样:

RecyclerView

现在,您将能够在指定的调试点的控制台中看到它们的值。因为现在它们实际上也被内部函数使用了。

这就是为什么你能够访问'workArea'而不是'typeId'。因为成功函数中没有使用'typeId'。

在成功函数中使用'typeId',您也可以在调试时在控制台中访问它。

var functionOne = function(){
    var a = 1,
        b = 2,
        c = 3;
    function functionTwo(){
       console.log("b = " + b); //put debug point here
    }
    functionTwo();
}
functionOne();
相关问题