局部变量与全局变量

昨天调程序碰到一个问题: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声明就可以解决。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值