首页 > 其他 > 详细

02.import 引用问题

时间:2021-04-07 20:00:22      阅读:16      评论:0      收藏:0      [点我收藏+]

  在 ES6 中,模块系统的导入与导出采用的是引用导出与导入(非简单数据类型),也就是说,如果在一个模块中定义了一个对象并导出,在其他模块中导入使用时,导入的其实是一个变量引用,如果修改了对象中的属性,会影响到其他模块的使用。

  通常情况下,系统体量不大时,我们可以使用 JSON.parse(JSON.stringify(str)) 简单粗暴地来生成一个全新的深度拷贝的 数据对象。不过当组件较多、数据对象复用程度较高时,很明显会产生性能问题,这时我们可以考虑使用 Immutable.js

 

  缺点:

主要是Immutable的API设计的和原生对象类似,容易混淆操作。例如其中Map和List的操作:

 

// Immutable
const map = Map({ a: 1, b: 2 });
const list = List([1,2,3]);

// 原生js
const obj = { a: 1, b: 2 };
const arry = [1,2,3];

// 取值方式对比
console.log(map.get(‘a‘));
console.log(list.get(0));
console.log(obj.a);
console.log(arry[0]);
 

优点:

  节省内存空间

上面提到了结构共享,Immutable.js 使用这种方式会尽量复用内存,甚至以前使用的对象也可以再次被复用。没有被引用的对象会被垃圾回收。

 

import { Map } from ‘immutable‘;
let a = Map({
  select: ‘users‘,
  filter: Map({ name: ‘Cam‘ })
})
let b = a.set(‘select‘, ‘people‘);

a === b; // false
a.get(‘filter‘) === b.get(‘filter‘); // true

 

 

02.import 引用问题

原文:https://www.cnblogs.com/woshidaniu/p/14628100.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!