Javascript传递param不会更新源对象

时间:2013-10-31 19:13:34

标签: javascript websocket pass-by-reference atmosphere

我有2个函数,每个函数都修改传递给它们的参数。

var data = [];

var DoStuff = function( $div , data )
{
    var $D = $div;
    var D = data;
    var socket = $.atmosphere;
    var stuff = {
        onMessage: function(message)
        { // when a message is asynch. received over websocket
            D.push( { "a": "b" } );
            D.push( { "y": "z" } );
            $D.append( JSON.stringify(D) );
            return message;
        }
    }

    this.start = function()
    {
        var socketStream = socket.subscribe( stuff );
        return socketStream;
    }
}

$(function(){

    var $div = $('#div');

    var doStuff = new DoStuff( $div , data );

    data.push( { "w": "x" } );

    $div.append( JSON.stringify(data) );

    var stream = doStuff.start();

});

有些事情都说完了之后,数组data包含两个对象:

data: [
    { "w": "x" },
    { "y": "z" }
]

但有时它只包含第一个对象:

data: [
    { "w": "x" }
]

如果我在DoStuff.a return true;上放置断点,D通常包含两个对象。但是大约10%的时间,D不包含第一个对象(仅第二个),YET,data仅包含第一个对象。 D是对data的引用,那么它们如何不同步?

编辑我尝试使用setTimeout()使每个push()等待,但这不会导致3个案例中的任何一个产生不同的结果。

我认为它不能成为一种竞争条件,因为这会被覆盖,但事情并没有发生。 a:b和y:z缺失。如果是这种情况,a:b或y:z应该仍然存在(以及w:x)。

0 个答案:

没有答案