在函数内部运行以下代码:
int num = 5498
int k = 2
int nDigit= 3
the result is num = 5398
当我在success函数中设置断点并尝试在控制台(Google Chrome)中调用变量“typeId”时,它会显示为未定义。但是,在Ajax调用之前定义的变量“workArea”仍然具有其值。这两个变量之间有什么区别呢?
答案 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();