JavaScript里面当对象引用做为函数参数传递时候,函数内的操作会被影响到作为参数的对象。

var detail = function (id_type,id) {
    require(['views/detail/detail.js'], function(page) {
        var detailPage = page;
        showPage(detailPage.view,'detailPage'+id);
        detailPage.init(id_type,id);
    });
}

我这样做page会被函数影响到,我希望是page不被改变,仅改变函数的内部变量,所以请问该怎么做呢

阅读 4.6k
3 个回答
var detailPage = page;

对象类型的复制是引用,两个对象指向同一个指针,改变其中一个,会影响另一个的值.
所以这里需要克隆,而不是赋值.

var page = {
    a: 1
};
var page2 = page;
page2.a = 10;
console.log(page);  // {a: 10}

var page3 = Object.assign({}, page);
page3.a = 100;
console.log(page);  // {a: 10}

你需要的是克隆

深拷贝

require(['views/detail/detail.js'], function(page) {

    **var detailPage = JSON.parse(JSON.stringify(page));**
    
    showPage(detailPage.view,'detailPage'+id);
    detailPage.init(id_type,id);
    
    //最后最好做一个回收 detailPage = null
});
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题