一 什么是set数据结构?
Set数据结构,类似数组。所有的数据都是唯一的,没有重复的值。它本身是一个构造函数
let set6 = [...new Set([1, 2, 2, 3, 4, 3, 5])] 去重 是伪数组
二、什么是原型链?
答:avaScript是面向对象的,每个实例对象都有一个__proto__属性,该属性指向它的原型对象,
这个实例对象的构造函数有一个原型属性prototype,与实例的proto属性指向同一个对象。
当一个对象在查找一个属性的时候,自身没有就会根据__proto__向它的原型进行查找,
如果都没有,则向它的原型的原型继续查找,直到查到Object.prototype.proto_为null,这样也就形成了原型链。
三、函数的防抖和节流。
防抖函数:将多次触发变成最后一次触发。通俗的理解就是电梯里每进一个人电梯门关闭的时间重新计算
节流函数:将多次执行变成每隔一个时间节点去执行的函数。通俗的理解就是电梯无论是否进人,开关时间都是固定的
四、.什么是重绘 什么是回流
重绘:改变元素颜色 改变元素背景色时,说白了就是元素样式改变不影响布局时
回流(也称重排):页面初次渲染,浏览器窗口大小改变,元素尺寸 位置 内容发生改变,dom删除/添加等等 说白了就是元素的尺寸,结构发生改变时就是回流
五、什么是事件委托?
让利用事件冒泡的原理,让自己的所触发的事件,让他的父元素代替执行。
六 闭包
闭包就是能够读取其他函数内部变量的函数。
当一个函数嵌套一个内部函数,并且这个内部函数是外部函数的返回值,当内部函数调用时引用了外部函数的自由变量(参数,变量,函数声明),致使外部函数无法释放内存空间,这就形成了闭包。
js引擎运行代码三步: | |
1.语法分析 : 在执行代码之前检查脚本中是否存在语法错误,如果有则给出报错 | |
2.预编译 : | |
1.全局预编译 | |
①生成一个全局的GO | |
②查找所有变量声明,如果当前AO或GO对象中不存在该变量则该变量作为对象的属性名存在, | |
值为undefined,如果该对象中已存在改变相同的属性名,则不做任何改变 | |
④如果遇到函数声明,则将函数名作为对象的属性名,函数作为对象的属性值,如果遇到重名则覆盖当前值 | |
2.局部预编译 | |
①在函数开始执行的前一刻,生成一个AO对象 | |
②分析函数的参数,将形参作为对象的属性名,实参作为对象的属性值,没有实参胡形参则值为undefined | |
③查找所有变量声明,如果当前AO中不存在该变量则该变量作为对象的属性名存在, | |
值为undefined,如果该对象中已存在改变相同的属性名,则不做任何改变 | |
④如果遇到函数声明,则将函数名作为对象的属性名,函数作为对象的属性值,如果遇到重名则覆盖当前值 | |
3.解释执行 : 逐行执行,做赋值操作 |
阻止冒泡和默认行为
阻止默认行为e.preventDefault
阻止冒泡e.stopPropagation
这只是一小部分
面试题还有很多,点个不迷路,下回接着看。