深拷贝、浅拷贝相关
浅拷贝是指copy的对象和被copy的对象它们公用一个实体,也就是同时指向内存中的一个相同的地址
深拷贝是指copy的对象和被copy的对象两个都是独立的、互不影响的。
值类型的copy都属于深拷贝,而引用类型copy都属于浅拷贝(string类型除外)
JSON.stringify与JSON.parse可以实现深拷贝
apply和call的异同点?
相同点: 都是可以改变this指向
不同点: apply通过数组形式传参
call直接传参,用逗号隔开
你所知道的所有性能优化
1.减少请求 2.代码优化 3.打包压缩文件 4.字体图标,精灵图。 5.图片懒加载. 6.减少cookie使用 7.尽量少操作dom以避免重绘和回流,文档碎片 8.减少闭包使用,防止内存泄露. 9.用户行为预测 10.使用离线缓存 11.分页加载数据 12.防抖节流 13.模块按需加载 14.路由懒加载
你所理解的闭包
闭包就是能够读取其他函数内部变量的函数。
在本质上,闭包是将函数内部和函数外部连接起来的桥梁。
封闭性: 外界无法访问闭包内部的数据
持久性:外部函数被调用之后,闭包结构依然保存在
缺点:闭包携带包含它函数的作用域,因此比其他函数占用的内存更多,泄露内存。解决方法是,在退出函数之前,将不使用的局部变量全部删除。
优点:减少创建全局变量 减少传递给函数的参数量
ES6新特性
1. const 与 let 变量
使用let声明的变量可以重新赋值,但是不能在同一作用域内重新声明
使用const声明的变量必须赋值初始化,但是不能在同一作用域类重新声明也无法重新赋值.
2.模板字面量
3.解构
在ES6中,可以使用解构从数组和对象提取值并赋值给独特的变量
4.for...of循环
for...of 循环用于循环访问任何可迭代的数据类型。
5.展开运算符
展开运算符用三个连续的点 (...) 表示使你能够将字面量对象展开为多个元素
6.ES6箭头函数
箭头函数没有自己的this而是引用外层的this。
7.函数默认参数
es6为参数提供了默认值。在定义函数时便初始化了这个参数
8.class、 extends、 super
9.Promise
代码优美,避免了地狱回调
它有三个状态:
pending就是未决,
resolve可以理解为成功,
reject可以理解为拒绝。
10.set map Set和Map分别用来声明一个数组和对象。
11.模块化开发