一、以自己理解讲解js堆和栈,以及深拷贝怎么解决?
(堆)是用来存放引用数据类型,例如对象,数组,函数
(栈)是用来存放基本数据类型,变量和引用数据类型的地址值 ; 体积小,数据经常变化
深拷贝的解决方案 :
1.使用js插件lodash的cloneDeep方法
2.使用递归实现深拷贝
3.如果数据中没有函数,undefined 可以使用json.stringify+json.parse实现深拷贝
二、什么是同源
http://www.qq.com:8080/a/b/c/test.html
协议 + 域名/IP地址 + 端口 + 路径 + 文件名(含后缀)
答: 同源就是两个页面有相同的协议 域名 端口 就属于同源 其中只要一个不同就不同源
三、什么是set数据结构?
Set数据结构,类似数组。所有的数据都是唯一的,没有重复的值。它本身是一个构造函数
let set6 = [...new Set([1, 2, 2, 3, 4, 3, 5])] 去重 是伪数组
四、什么是原型链?
答:avaScript是面向对象的,每个实例对象都有一个__proto__属性,该属性指向它的原型对象,
这个实例对象的构造函数有一个原型属性prototype,与实例的proto属性指向同一个对象。
当一个对象在查找一个属性的时候,自身没有就会根据__proto__向它的原型进行查找,
如果都没有,则向它的原型的原型继续查找,直到查到Object.prototype.proto_为null,这样也就形成了原型链。
五、函数的防抖和节流。
防抖函数:将多次触发变成最后一次触发。通俗的理解就是电梯里每进一个人电梯门关闭的时间重新计算
节流函数:将多次执行变成每隔一个时间节点去执行的函数。通俗的理解就是电梯无论是否进人,开关时间都是固定的
六、.什么是重绘 什么是回流
重绘:改变元素颜色 改变元素背景色时,说白了就是元素样式改变不影响布局时
回流(也称重排):页面初次渲染,浏览器窗口大小改变,元素尺寸 位置 内容发生改变,dom删除/添加等等 说白了就是元素的尺寸,结构发生改变时就是回流
七、什么是事件委托?
让利用事件冒泡的原理,让自己的所触发的事件,让他的父元素代替执行
八、ES6的新特性有哪些?
1、const/let
2、箭头函数
3、Promise(Promise有三种状态,pending,resolved,rejected,状态修改是不可逆的, then、catch、finally、all、race方法)
4、模板字符串
5、数据解构
6、对象字面量
7、展开运算符
8、rest语法(剩余参数)
9、默认参数
10、class类
九、为什么构造函数的方法要放在prototype里边为什么不直接用this.的方式声明?
答:因为prototype占用一个存储空间,实例通过proto指针指向prototype,可以减少内存占用减少不必要的开销
十、JS作用域和变量提升?
作用域:变量起作用的范围 变量访问会层层往上级作用域访问直到window,称为作用域链
变量提升:JS编译阶段会将文件中所有var,function声明的变量提升到当前作用域最顶端