我正在调查我继承的网站中的一个错误,我的调查提出了一个有趣的 javascript 范围问题。下面的代码已经过简化,只显示相关细节。
下面的通用服务有一个问题,它有时在注销后不返回任何数据(当然,仅在生产中)。发生这种情况时,我们会看到 ApplyToolbarBindings 的“数据”参数不是 null 或空对象——它实际上是由上一个页面请求的状态组成的。该对象的状态通过 asp.net 回发而存在,换句话说,最终效果是工具栏即使在他们注销后仍显示“已知”用户。
function ApplyToolbarBindings(data) {
if (!data.IsKnown) {
jQuery("#ToolBar").attr("data-bind", 'template: { name: "AnonymousUserToolbarTemplate" }');
} else {
jQuery("#ToolBar").attr("data-bind", 'template: { name: "KnownUserToolbarTemplate" }');
}
ko.applyBindings(data, document.getElementById('ToolBar'));
}
function GetToolBarData(callbackFunction) {
jQuery.ajax({
url: '/Services/Toolbar/ToolBarService.ashx?v=' + toolbarV,
success: callbackFunction,
dataType: 'json',
type: 'GET'
});
}
function loadToolbar() {
GetToolBarUserData(ApplyToolbarBindings);
}
jQuery(function () { loadToolbar(); });
当函数已被全局定义时,该函数的参数的生命周期是什么?这种行为是因为没有数据返回时ajax对象状态没有改变吗?