闭包
闭包:
有权访问另一个函数作用域中变量的函数,
一个作用域可以访问另外一个函数内部的局部变量
作用:延伸了变量的作用范围
特性:
变量或者参数不会被垃圾回收机制回收
函数套函数
内部函数可以直接访问外部函数的内部变量或者参数
优点:
变量长期驻扎在内存中
避免了全局变量污染
缺点:
常驻内存,增大了内存的使用量,使用不当会造成内存泄漏
递归
什么是递归
函数内部自己调用自己,该函数就是递归函数
必须有结束条件
拷贝
浅拷贝
// 浅拷贝 :只拷贝一层,更深层次对象级别的只拷贝引用
// 深拷贝 拷贝多层 每一级别的数据都会拷贝
var obj = {
id:1,
name:"andy",
msg:{
age:18
}
}
var o ={}
// 第一种
// for(var k in obj){
// // k 属性名 obj[k] 属性值
// o[k] = obj[k]
// }
// console.log(o)
// o.msg.age =23
// console.log(obj)
// 第二种 合并对象Object.assign(target,source1,source2)
// target 目标对象 source1,source2 若干个源对象
// 实行的是浅拷贝
// var obj1 = {}
// var a ={a:1}
// var b={b:2}
// console.log(Object.assign(obj1,a,b))
// console.log(obj1) //{a:1,b:2}
var obj1 = {a:{b:1}}
var obj2= Object.assign({},obj1)
obj1.a.b=3
console.log(obj2.a.b)
深拷贝
// 拷贝多层 每一级别的数据都会拷贝
var obj = {
id:1,
name:"andy",
msg:{
age:18
},
colors:['pink','red']
}
var o ={}
// 封装函数
function deepCopy(newobj,oldobj){
for(var k in oldobj){
// 判断我们的属性值属于那种数据类型
var item=oldobj[k]
// 判断这个值是否是数组
if(item instanceof Array){
newobj[k]=[]
deepCopy(newobj[k],item)
}else if(item instanceof Object){
//判断是否为对象
newobj[k]={}
deepCopy(newobj[k],item)
}else{
// 属于简单数据类型
newobj[k] = item
}
}
}
deepCopy(o,obj)
o.msg.age =89
console.log(obj,o)
标签:闭包,obj,递归,console,item,var,824,拷贝,newobj
From: https://www.cnblogs.com/mengxiaoye/p/16622683.html