深浅拷贝
- 含义:通常是指将一个引用数据类型,拷贝到另外一个变量中,但是根据拷贝的方法不同展示出的效果也有差异。
- 浅拷贝:将一份数据拷贝到另外一个变量中,修改第一层数据时不会相互影响,但是修改第二层数据时会互相影响。
- 深拷贝:将一份数据拷贝到另外一个变量中,不管修改哪一层数据,两个对象之间都不会相互影响。
let obj = {
name:'张三',
age:18,
info: {
width:100,
height:280
}
}
let newObj = {}
for (let key in obj) {
newObj[key] = obj[key]
}
newObj.age = 99
newObj.info.width = 999
console.log('newObj',newObj)
console.log('obj',obj)
let obj = {
name:'张三',
age:18,
info: {
width:100,
height:280
}
}
let newObj = {}
function deepClone (target,origin) {
for (let key in origin) {
if (Object.prototype.toString.call(origin[key]) === '[object Object]') {
targer[key] = {}
deepClone(target[key] ,origin[key])
}
}
}
newObj.age = 99
newObj.info.width = 999
console.log('newObj',newObj)
console.log('obj',obj)
函数的定义与调用
- 定义:
- 在堆内存开一个空间
- 将函数的函数体内的代码 保存到堆内存中
- 将堆内存的地址保存在变量名(函数名),最后将这个变量名存储在栈内存中
- 调用:
- 根据变量名(函数名)中的地址,找到对应的函数
- 然后在调用栈中开一个新空间(函数的执行空间)
- 在执行空间中 对函数的形参进行赋值
- 在执行空间中 执行函数的代码
- 销毁当前函数的执行空间
永不销毁的执行空间
- 正常书写一个函数
- 在这函数内 向外返回一个 引用数据类型
- 当满足上述条件时,这个函数的执行空间将不会被销毁
function fn () {
const obj {
name:'张三',
age:18
}
return obj
}
const newObj = fn ()
console.log(newObj)
闭包
- 需要 直接 或者 间接的返回一个函数
- 内部函数需要访问 外部函数的局部变量
- 好处:
- 延长变量的生命周期,在函数外可以使用函数内的变量
- 弊端:
- 执行空间不会被销毁,如果大量使用会造成内存泄漏
function outter () {
let a = 100
let obj = {
name:'函数',
age:18
}
function inner() {
return obj
}
return inner
}
const newFn = outter ()
let num = newFn ()
console.log(num)