我真的很无语,别告诉我这不是个BUG
俩个文件里引入了
var _mData=require("…/…/…/utils/data.js");
一个文件使用了 _mData.splice(0,1) 另一个文件的数据也会被修改。这是几个概念?
而且还是在文件中的
onLoad: function (options) {
}
这个发放里执行的。能告诉我这是怎么回事吗?
10 回复
赋值只能针对基本类型,比如string和int之类的,Array不是基本类型,如果用=方式赋值,只是简单引用,所以改变临时变量时,原变量也会发生改变。
我们可以通过自定义一个克隆非基本类型变量的方法来实现:
function clone(obj) { var o; if ( typeof obj == "object" ) { if (obj === null ) { o = null ; } else { if (obj instanceof Array) { o = []; for ( var i = 0, len = obj.length; i < len; i++) { o.push(clone(obj[i])); } } else { o = {}; for ( var j in obj) { o[j] = clone(obj[j]); } } } } else { o = obj; } return o; } |
用的时候这样:
var _mData=require( "../../../utils/data.js" ); var aaa= clone(_mData); aaa.splice(0,1); |