jsvar foo1 = function (a) { var b = $.extend({},a); console.log(JSON.stringify(a)); console.log(JSON.stringify(b)); b.d=3; console.log(JSON.stringify(a)); console.log(JSON.stringify(b)); };
执行输出
foo1({d:1})
{"d":1}
{"d":1}
{"d":1}
{"d":3}
jsvar foo2 = function (a) { var b = $.extend({},a); console.log(JSON.stringify(a)); console.log(JSON.stringify(b)); b.d.c=3; console.log(JSON.stringify(a)); console.log(JSON.stringify(b)); };
执行输出
foo2({d:{c:1}})
{"d":{"c":1}}
{"d":{"c":1}}
{"d":{"c":3}}
{"d":{"c":3}}
为什么foo2克隆之后对b的修改会影响到a的值,而foo1里面却不会?
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
@公子 正解,深浅拷贝的问题,此处必须用深拷贝
第一种情况下你的d值是基本类型
第二种情况下你的d值是对象
对象传递的是引用