一、javascript:
1、 数据类型:引用类型和普通类型
- 区别:
普通类型:放在栈里相当于一对一操作;
引用类型:存放在堆里,栈里放着他的引用值,js不能操作引用类型的
深拷贝和浅拷贝(深拷贝最简单的方式是JSON.paras,问题是函数、正则。。不能拷贝到)
2、作用域:作用域、作用域链和闭包
-
作用域的问题: let、var、const
区别:- let 存在暂时性死区,有自己的作用域,
- var会有变量提升,
- const作为常量但是如果是对象,那里面的key的值会发生改变,因为是引用类型)
-
闭包:什么是闭包、 闭包的好处:创建私有变量,减少全局变量,防止变量名污染
闭包的坏处:不会被垃圾回收机制回收造成内存泄漏,
如何解决闭包的坏处:将用过之后的变量设置null
3、原型链
4、this:this指向、改变this指向
- 普通this在函数执行的时候确定,谁调用指向谁,严格模式下指向window
- 箭头函数在函数创建的时候确定,一般指向上下文
- 通过call、apply、bind可以修改this指向
- call、apply区别是call的参数是字符串,apply是伪数组 ,
- bind跟他俩的区别是返回一个函数,需要a.bind(b)()去执行才生效
5、event-loop事件循环:
- 微任务(promise、MutationObserver、node中process.nextTick )、
- 宏任务(setTimeOut,setInterval,点击事件)
6、事件执行机制:事件委托(事件代理),如何实现委托
JavaScript 事件触发有三个阶段。 1. 捕获阶段 2. 目标阶段 3. 冒泡阶段 事件冒泡和事件捕捉
7、优化:防抖、节流、文档碎片、虚拟列表、高性能API
8、URL渲染过程
9、设计模式:观察者模式和订阅发布模式
二、es6:
箭头函数
解构赋值
new Set,new Map
新增数组、对象方法
三、css:
1、BFC:如何实现BFC
2、重排重绘:什么是重排重绘、如何减少重排重绘
影响布局变化会引起重排,影响样式的背景颜色之类的会发生重绘
发生重排一定会发生重绘,重绘不一定重排
实现隐藏最好用visibility: hidden;别用display:none因为位置没发生变化只发生了重绘
css优化就是减少重排重绘