[英]Javascript callback function scope?
我有一个JavaScript函数,该函数具有一个回调,然后是一个匿名函数,然后是另一个回调,并且作用域出了点问题。 参数callbackFunc
从第一个函数调用中保留其值,而不使用第二个函数调用中传递的新值。
function IsReady(callbackFunc) {
if (!IsValid()) return false;
IsConnected(function () {
if (typeof (callbackFunc) == 'function')
callbackFunc();
return true;
});
}
function IsConnected(validCallbackFunc) {
$.post("IsConnected", function (data) {
if (data.IsValid) {
if (validCallbackFunc && typeof (validCallbackFunc) == 'function')
validCallbackFunc();
}
});
}
$('#SaveButton').click(function () {
IsReady(SaveInvoice); // works
});
$('#ExportButton').click(function () {
// works only if IsConnected() is true
// otherwise SaveInvoice is called again
IsReady(ExportInvoice);
});
function SaveInvoice() {}
function ExportInvoice() {}
在某些情况下,当我单击ExportButton时,将运行SaveInvoice函数而不是ExportInvoice函数。 我猜这是一个范围问题-某种程度上保留了callbackFunc的旧值。 但是由于回调+匿名函数+另一个回调的组合,我不太了解。 我没有编写此代码,但是我必须对其进行修复。 我有什么办法可以清除IsReady()末尾的callbackFunc的值?
如果IsConnected()为true,则IsReady(ExportInvoice)有效。 如果IsConnected()为false,则结果是将执行SaveInvoice(),而实际上不应该执行任何操作(因为未连接)。
无法在IsReady
函数的两个不同调用之间保留callbackFunc
值。
在您的代码中,每次执行click事件处理程序时,在调用IsReady
时都会创建一个新的作用域。 每个作用域都有自己的局部参数callbackFunc
。 每个作用域将定义传递给IsConnected
自己的匿名函数,该函数驻留在封闭在其中的callbackFunc
变量中。
因此,这不是范围问题。
为了证明这一点,我在这里模拟了您的代码: http : //jsfiddle.net/pwJC7/
在您的代码中,您讨论了IsConnected返回值。 该函数实际上不返回任何内容。 连接状态似乎是通过ajax调用来检查的,该调用返回具有IsValid
属性的XML或JSON数据(在小提琴中由$_post
模拟)。
也许您的问题是由于此异步调用引起的。 但是,由于使用提供的JavaScript代码单击ExportInvoice按钮,您不可能体验到对SaveInvoice
函数的调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.