我真的很无语,别告诉我这不是个BUG

问题模块 操作系统 工具版本
开发者工具 Windows v1.01.1712150

俩个文件里引入了

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

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

而且还是在文件中的

onLoad: function (options) {

}

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

最后一次编辑于  01-10  (未经腾讯允许,不得转载)
收藏 0评论 0
关注问题写回答

13 个回答

  • ghostsf🍊ghostsf🍊

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

    赞同 0没有帮助
    评论 0
    复制
    01-15
  • (●ω● )(●ω● )

    楼上说得对。

    赞同 0没有帮助
    评论 0
    复制
    01-14
  • 遇见👀遇见👀

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

    赞同 0没有帮助
    评论 0
    复制
    01-13
  • 再见,电脑崽再见,电脑崽

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

    赞同 0没有帮助
    评论 0
    复制
    01-12
  • 再见,电脑崽再见,电脑崽


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


    赞同 0没有帮助
    评论 0
    复制
    01-12
  • Sun🔅Sun🔅

    splice会改变原始数组吧

    赞同 0没有帮助
    评论 0
    复制
    01-12
  • 开发-jenkin开发-jenkin

    操作问题

    赞同 0没有帮助
    评论 0
    复制
    01-12
  • 胡冰胡冰

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

    赞同 0没有帮助
    评论 0
    复制
    01-11
  • 小杰小杰

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

    赞同 0没有帮助
    评论 0
    复制
    01-10
  • LastLeafLastLeaf

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

    赞同 0没有帮助
    评论 0
    复制
    01-10