jQuery中的$.Callbacks()

测试发现,如果回调的第一个参数是一个对象,而其中一个回调修改了对象的属性的话,那么后面的回调都会得到修改后的对象

by lmk123

JavaScript

var cbs = $.Callbacks(),
    origalObj = {
        test:'我本来应该是这样的'
    };

function fn1( obj ) {
    obj.test = '我修改了test属性';
}


function fn2( obj ) {
    $('body').append('<br>第二个回调函数读取到的test属性:'+obj.test);
    $('body').append('<br>原对象的test属性:'+origalObj.test);
}

cbs.add(fn1).add(fn2).fire(origalObj );

$('body').append('<br>结论:对象可能会被其它回调修改(因为对象通过引用传递)');

cbs = $.Callbacks('memory');

origalObj = {
        test:'我本来应该是这样的'
    };

cbs.add(fn1).add(fn2).fire(origalObj );

$('body').append('<br>结论:即使加上了 memory 标志也没用');