我真的很无语,别告诉我这不是个BUG
发布于 6 年前 作者 lei75 12255 次浏览 来自 问答

俩个文件里引入了

var _mData=require("…/…/…/utils/data.js");

一个文件使用了  _mData.splice(0,1) 另一个文件的数据也会被修改。这是几个概念?

而且还是在文件中的

onLoad: function (options) {

}

这个发放里执行的。能告诉我这是怎么回事吗?

10 回复

操作问题

splice会改变原始数组吧

楼上说得对。

你这水平还是别搞开发了 +1

问题在于他用require()引入的模块,相当于是一个全局的数据,直接修改,肯定会影响所有引用该模块的页面的,这个不是BUG。

这个还真不是个bug,请js高手教教吧。

如果变量只是临时改变一次的话(不需要连续修改值)可以用slice()

赋值只能针对基本类型,比如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);

你这水平还是别过搞开发了

你没懂我的意思,你要看_mData里的具体实现,也就是…/…/…/utils/data.js这个文件是怎么写的

回到顶部