昨天调程序碰到一个问题:Microsoft JScript runtime error: '__pendingCallbacks[...].async' is null or not an object
google后得到:
http://blog.csdn.net/fanfengchimo/archive/2007/07/20/1700402.aspx
http://www.cnblogs.com/xioxu/archive/2006/11/17/563202.html
原来是微软的代码里这一段i=0使用的是global的。
function WebForm_CallbackComplete() {
for (i = 0; i < __pendingCallbacks.length; i++) {
callbackObject = __pendingCallbacks[i];
if (callbackObject && callbackObject.xmlRequest && (callbackObject.xmlRequest.readyState == 4)) {
WebForm_ExecuteCallback(callbackObject);
if (!__pendingCallbacks[i].async) {
其实由于js是弱类型语言,大家都习惯于直接上来就用一个变量,而不是用var声明。缺点来了吧:即使是我不用变量i,如果在callback回来的处理函数再去callback,也会出现问题。WebForm_ExecuteCallback(callbackObject);
就有可能改变global i的值。
所以这还是一个潜在的bug.幸好对我来说,并没有callback调用callback,只需要用i的时候加上var声明就可以解决。