两个json互操作的有关问题

两个json互操作的问题

            function sum(src_ol, tag_ol) {
                var sol = {'l': [], 'f': '', 'c': ''};
                var tol = {'l': [], 'f': '', 'c': ''};
                if (src_ol) {
                    $.extend(sol, src_ol);
                }
                if (tag_ol) {
                    $.extend(tol, tag_ol);
                }
                var r =tol.l;
                for (var i = 0; i < sol.l.length; i++) {
                    var o = sol.l[i];
                    for (var n in r) {
                        if (r[n][tol.f] === o[sol.f]) {
                            r[n][tol.c] += o[sol.c];
                        }
                    }
                }
                return r;
            }
            function test() {

                var s = [{'e': 'p', 'c': 5}, {'e': 'p', 'c': 4}, {'e': 'k', 'c': 10}];

                var t = [{"k": "k", "r": 0, "b": 0}, {"k": "p", "r": 0, "b": 0}, {"k": "r", "r": 0, "b": 0}];

                var ret = sum({'l': s, 'f': 'e', 'c': 'c'}, {'l': t, 'f': 'k', 'c': 'r'});

                console.log(t);
                console.log(ret);
            }

问:为什么 t和ret 的值一样?明明在sum中已经赋值给新变量了;
要求:sum 返回新的t,并不改变t 
求大牛给看看。谢谢!!!
------解决方案--------------------
引用:
if (src_ol) {
                    $.extend(true,sol, src_ol);
                }
                if (tag_ol) {
                    $.extend(true,tol, tag_ol);
                }

这样试下


数组和对象是引用类型的,你在方法里面修改了,会影响原来的,加一个true表示是深度拷贝。