我有一个JavaScript函数,它有一个回调,然后是一个匿名函数,然后是另一个回调,并且范围出了问题。参数callbackFunc
保留其第一个函数调用的值,而不使用第二个函数调用中传递的新值。Javascript回调函数范围?
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的值?
IsReady(ExportInvoice)在IsConnected()为true时有效。如果IsConnected()为false,那么结果就是SaveInvoice()在实际上什么都不应该发生时执行(因为它没有连接)。
我想你应该也发布相关的HTML。 – Pointy 2011-04-02 22:59:56
你的javascript看起来很好。尽管你对返回真/假的理解不起作用。返回语句不像您期望的那样级联,没有处理返回值。 – Raynos 2011-04-02 23:08:26
不是我的代码哈哈。是的,回报什么都不做。但是这并不能解释为什么当点击ExportButton时调用SaveInvoice。我已经删除了不必要的回报。 – 2011-04-02 23:25:03