# 第一次面试
# 自我介绍
# var let const的区别
- var
- 有变量声明提升,可先使用后声明;
- 可重复声明;
- 函数作用域,无块级作用域。
- let
- 有块级作用域;
- 不可重复声明;
- 不能先使用后声明,否则会出现暂时性死区;
- const
- 有块级作用域;
- 不可重复声明;
- 不能先使用后声明,否则会出现暂时性死区;
- 声明的变量为常量不可更改,但是对象可以内的属性可以更改,因为存储的是对象的指针。
# var的优缺点(全局变量的优缺点)
优点 var声明的全局变量,可以减少变量的个数,减少由于实际参数和形式参数的数据传递带来的时间消耗。
缺点
- 过多的全局变量会占用较多的内存单元;
- 全局变量破坏了函数的封装性能;
- 全局变量使函数的代码可读性降低。由于多个函数都可能使用全局变量,函数执行时全局变量的值可能随时发生变化,对于程序的查错和调试都非常不利。
# 变量声明提升
1.用var声明的全局变量,会声明提升,在读取脚本的时候提升到顶部; 2.函数也会提升,可以先使用后声明。
# es6新增属性
- Symbol;
- let,const;
- 模版字符串;
- 对象字面量简写法;
- class类;
- 箭头函数;
- 函数默认参数;
- 解构赋值;
- 拓展运算符;
- import;
- reduce;
- forEach,map,filter;
- Set,Map,WeakMap,TypedArray。
# h5固定底部菜单的实现方式
# typeof
typeof 的实现原理是因为js底层对变量都是用二进制存储的存储,低位的前三位都为0则为对象,而null全为0所以判断也为object,010为浮点数,100字符串,110布尔,1为整数。
# instanceOf底层实现原理
instanceOf的底层原理是,通过判断左侧的实例的__proto__是否和右侧的构造函数的prototype相等,如果相等的话就返回true,如果不相等的话就返回false。
# this指向
# 实现new
# call apply bind
# Map Set
Set 和 Map 主要的应用场景在于 数据重组 和 数据储存
Set 是一种叫做集合的数据结构,Map 是一种叫做字典的数据结构
集合(Set) ES6 新增的一种新的数据结构,类似于数组,但成员是唯一且无序的,没有重复的值。
字典(Map) 集合 与 字典 的区别:
共同点:集合、字典 可以储存不重复的值 不同点:集合 是以 [value, value]的形式储存元素,字典 是以 [key, value] 的形式储存
# weakMap weakSet
- WeakSet WeakSet 对象允许你将弱引用对象储存在一个集合中
- 成员都是弱引用,可以被垃圾回收机制回收,可以用来保存 DOM 节点,不容易造成内存泄漏。
- WeakSet 不可迭代,因此不能被用在 for-of 等循环中。
- WeakSet 没有 size 属性。
- WeakMap WeakMap 对象是一组键值对的集合,其中的键是弱引用对象,而值可以是任意。
- 只接受对象作为键名(null 除外),不接受其他类型的值作为键名
- 键名是弱引用,键值可以是任意的,键名所指向的对象可以被垃圾回收,此时键名是无效的
- 不能遍历,方法有 get、set、has、delete
# 图片资源优化
- 使用雪碧图,减少http请求的占用;
- 图片懒加载;
- 图片预加载;
- 使用webp图片格式,优势是同等质量的前提下,webp的体积要比png等要小近百分之二十八左右。
# webp apng
webp是谷歌于2010年的时候提出的,在保证质量的情况下,体积相比png减少近百分之三十,缺点是兼容性比较差。 apng是Mozilla于2004年推出的,Apng格式是Png的动态形式,是png的扩展,支持半透明,没有锯齿问题,效果上更好。有损压缩后体积比gif小30%,而且没有锯齿。缺点就是兼容性比较差。