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-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
这个是 jQuery 对象拷贝的问题,并不是 JavaScript 的问题,查看 API文档 可以知道,
$.extend()第一个参数指定的是你是否进行深拷贝,默认是false。你可以设置成var b = $.extend( true, {}, a );试试。 关于深拷贝和浅拷贝的文章可以网路上搜索一下,这里给出一个阮老师的文章链接:http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_inhe...@公子 正解,深浅拷贝的问题,此处必须用深拷贝
第一种情况下你的d值是基本类型
第二种情况下你的d值是对象
对象传递的是引用