作为闭包的回调中的Javascript变量作用域

Javascript variable scope in callbacks as closures

本文关键字:Javascript 变量 作用域 回调 闭包      更新时间:2023-09-26

我有这个:

$(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控制台加载页面后出现问题I:

console.info(channelLatestMessages.length);

2

但是我在代码中又得到了0channelLatestMessages.length值。

这怎么可能??

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