95. 深拷贝和浅拷贝的区别
-
浅拷贝:
浅拷贝只复制对象的第一层属性,子对象仍然是引用类型。如果修改子对象的属性,原对象中的相应属性也会被修改。常见的浅拷贝方法:
Object.assign()
- 数组的
slice()
、concat()
示例:
const obj1 = { a: 1, b: { c: 2 } }; const obj2 = Object.assign({ }, obj1); obj2.b.c = 3; console.log(obj1.b.c); // 3,原对象也受影响
-
深拷贝:
深拷贝会递归复制对象的所有属性,包括子对象,确保拷贝对象和原对象之间完全独立。常见的深拷贝方法:
JSON.parse(JSON.stringify())
(局限于不支持函数、undefined
)- 自定义递归函数
示例:
const obj1 = { a: 1, b: { c: 2 } }; const obj2 = JSON.parse(JSON.stringify(obj1)); obj2.b.c = 3; console.log(obj1.b.c); // 2,原对象不受影响
96. ES6 模块化
-
模块化的定义:
模块化是一种将代码拆分成独立、可复用部分的技术,每个模块只负责实现特定的功能。在 ES6 之前,常用的模块化方案有CommonJS
(Node.js 使用)和AMD
。ES6 引入了新的模块化标准,使用import
和export
关键字。 -
ES6 模块的特性:
- 静态解析:模块在编译时就确定依赖关系,而不是在运行时加载。
- 按需导入:通过
import
可以只导入模块中需要的部分,提高性能。
-
示例:
模块的导出:
// math.js export const add = (a, b) => a + b