前端零碎整理二 B站
作者:互联网
一、预编译
1、作用域的创建阶段:创建Ao对象—>找形参和变量的声明,作为Ao对象的属性名,值为undefined—>实参和形参相统一—>找函数声明,会覆盖变量的声明。
2、预编译阶段:逐行执行。
二、This
1、在函数中直接使用
2、函数作为对象夫人方法被调用,谁调用,指向谁。
3、get(‘111’) 相当于get.call(window,’111’)
4、Person.get(111) 相当于 Person.get.cal(Person,111)
5、箭头函数中的this在定义函数的时候绑定,非执行的时候绑定,也就是说this是继承自父执行上下文中的this(注意不是平级), 箭头函数没有this,(因此不能用做构造函数)箭头函数内部的this就是外层代码块的this也即是父级的this。
三、深拷贝和浅拷贝:
1、浅拷贝是创建一个对象,这个对象有着原始对象属性值的一份精确拷贝;如果属性是基本类型,拷贝的就是基本类型的值,如果属性是引用类型,拷贝的就是内存地址,所有如果其中一个对象改变了这个地址,就会影响到零一对象。
2、深拷贝是将一个对象从内存中完整的拷贝一份出来,从堆内存中开辟一个新的区域存放新对象,且修改新对象不影响原对象。
3、浅拷贝和赋值的区别:
当我们把对象赋值给一个新的变量时,赋的其实是该对象在栈中的地址,而不是堆中的数据,也就是两个对象指向同一个存储空间,无论哪个对象发生改变,其实都是改变存储空间的内容,因此两个对象是联动的;
浅拷贝是重新在堆中创建内存,拷贝前后对象的基本数据类型互不影响,但拷贝前后对象的引用类型因共享同一块内存,会互相影响.(Object.assign、…、concat、lodash、clone)
深拷贝:从堆内存中开辟一个新的区域存放对象,对对象中的子对象进行递归拷贝,拷贝前后的两个对象互不影响。($.extend、json.parse、deepClone)
赋值:同一个地址;浅拷贝:
深拷贝:
function deepClone(obj){
var cloneobj =new obj.constrcutor
If(obj===null){return null}
If(obj instanceof Data ){return new Data(obj)}
If(obj instanceof RegExp ){return new RegExp(obj)}
If(type of obj !=’obj’){return obj}
for (var i in obj){
If (obj hasowProperrty(i)){
cloneObj[i] = deepClone(obj[i])
}
}
return obj
}
A instanceof B: B的prototype of 是否在A的原型链上。
四、防抖函数、节流函数
1、防抖函数:持续触发一个事件,在一定时间内没有触发,才执行操作;若在规定时间没有到来,再次触发是事件,就会重新计时。实现:用闭包。应用:图片懒加载。
2、节流函数: 当持续触发事件的时候,保证一段时间内,只调用一次事件处理函数,一段时间内,只做一件事。实际应用:表单的提交。案例:鼠标不断点击触发,规定在n秒内多次点击只有一次生效。
五、
六、
七、
八、
九、
十、
十一、
标签:obj,函数,get,对象,前端,零碎,整理,return,拷贝 来源: https://blog.csdn.net/qq_41074404/article/details/117464688