【问题标题】:Javascript variable scope in callbacks as closures [duplicate]回调中的Javascript变量范围作为闭包[重复]
【发布时间】:2014-08-25 15:14:16
【问题描述】:

我有这个:

$(document).ready(function(){

pubnub.subscribe ({
    connect: function(m){

        var channelLatestMessages = [];

        pubnub.history({
          channel: broadcastChannel,
          count: 1,
          callback: function (m) {
            if(m[0].length > 0)
            {
                $.each(m[0], function(index, value){
                    channelLatestMessages.push(value);
                });
            }
            //THE NUMBER OF MESSAGE OBJECTS RETURNED IS 2
            //HERE THE OUTPUT IS 2
            console.info(channelLatestMessages.length);
          },
        }); 

        //THE NUMBER OF MESSAGE OBJECTS RETURNED IS 2
        //HERE THE OUTPUT IS 0          
        console.info(channelLatestMessages);
    }
});

});

如果我声明:

channelLatestMessages = [];

没有 var 关键字并且在 Firebug 控制台中出现页面加载问题后:

console.info(channelLatestMessages.length);

号码是2

但我在代码中再次得到0channelLatestMessages.length 值。

这怎么可能???

【问题讨论】:

标签: javascript variables scope anonymous-function


【解决方案1】:

因为在一种情况下您测试长度之后导致回调运行的事件被触发,而在另一种情况下您在此之前测试它。

【讨论】:

    猜你喜欢
    • 2016-07-28
    • 2014-10-27
    • 1970-01-01
    • 2015-06-14
    • 2010-09-16
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多