目录

闭包
闭包
作用域 this
声明提升(变量提升)
声明提升
盒模型
盒模型
布局(all) flex 圣杯布局(JS实现左右高度为窗口高度)+ 双飞翼布局
布局

get post
JS 跨域
HTTP状态码
HTTP状态码
position

垂直居中 定宽 不定宽
css布局 浮动
HTTP协议
absolute && relative 区别

块级元素&&行内元素
代理事件的原理
JS promise原理及实现
float
手撕promise (解决回调地狱回调代码难以维护的问题)
js数组类型
instanceof
浅谈 instanceof 和 typeof 的实现原理
settimeout 、 setinterval
彻底理解setTimeout()

1
2
3
4
5
6
7
8
9
# settimeout
settimeout(callback, time)

# setinterval
setinterval(callback, time)

setTimeout含义是定时器,到达一定的时间触发一次,
但是setInterval含义是计时器,到达一定时间触发一
次,并且会持续触发

伪元素/伪类的区别
伪元素/伪类的区别
form表单当前页面无刷新提交(target iframe)
form表单提交方式
表单可实现无刷新页面提交,无需页面跳转,如下,通过一个隐藏的iframe实现,form表单的target设置为iframe的name名称,
form提交目标位当前页面iframe则不会刷新页面

1
2
3
4
<form action="/url.do" method="post" target="targetIfr">
<input type="text" name="name"/>
</form>
<iframe name="targetIfr" style="display:none"></iframe>

清除浮动 原理(使用clear:both 会把浮动元素的边界拉下来到标准流,从而把对应标准流的位置撑开)
清除浮动
deBounce 防抖 实现


http && https ssl 证书验证 加密算法
ES6、ES7 新特性
JS ES6
let const class声明类 promise 模板字符串 对象数组 解构赋值 箭头函数(this指向外层作用域)
队列里的优先级问题
(微任务(promise)宏任务(xhr请求、settimeout、setInterval))当前同步操作完成后优先执行微任务队列任务
前端性能优化
xss
http 协议 header 缓存:(强缓存、协商缓存)
margin 坍塌, 水平方向会不会坍塌


1、当两个对象为上下关系时,而且都具备margin属性时,上面的margin-bottom与下面的margin-top会发生塌陷
  当margin-bottom和margin都为正数时,结果为两者之间的最大值
  当margin-bottom和margin-top都为负时,结果为两者绝对最较大的那个值。
  当margin-bottom和margin-top为一正一负时,结果为两者之和。
2、当两个对象为上下包含关系
  父元素无填充内容,且没有设置border时,子元素的margin-top不会起作用
  父元素设置border属性,子元素的margin-top起作用
  父元素有填充内容,子元素的margin-top会起作用,当margin-top小于填充内容时,距离为填充内容的高度
  
CSS及浏览器的设计者们希望我们在布局时,如果遇到上下两个并排内容块的安排,最好只设置其中每个块上或下margin的一处即可。

但对于父块DIV内含子块DIV的情况,就会按另一条CSS惯例来解释了,那就是:对于有块级子元素的元素计算高度的方式,如果元素没有垂直边框和填充,那其高度就是其子元素顶部和底部边框边缘之间的距离。
解决父元素塌陷的方法有,(应该给父类元素添加BFC)
1、为父元素添加overflow:hidden;
2、为父元素float非none属性,也可为子元素添加float非none属性
3、需要给父div设置:边框,当然可以设置边框为透明;
4、为父DIV添加padding,或者至少添加padding-top;
5,如果遇到上下两个并排内容块的安排,最好只设置其中每个块上或下margin的一处即可。


如何判断一个数组/data
instanceof、typeof、 constructor、 Object.prototype.toSting.call()

三栏布局 float position flex
float 布局对后续元素的影响

数组去重

1
2
3
4
5
6
双重循环去重
indexOf
排序后去重(存疑)
利用对象属性
Set去重(return [...new Set(arr)])
Set和from(Array.from(new Set(arr)))

链接
1
2
3

原型链

1
[](https://juejin.im/post/5835853f570c35005e413b19#heading-0)

面向对象
哪些数组方法不能改变数组本身(concat、slice)

1
2
改变原始数组的操作方法:
不会改变原始数组的操作方法:

选择器标签

判断一个变量是整数
数组去重 set for循环实现数组reduce
字符串数组操作方法

1
[javascript 下常用的字符串操作](http://f10.moe/2014/10/15/javascript-%E4%B8%8B%E5%B8%B8%E7%94%A8%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2%E6%93%8D%E4%BD%9C/)

1
2
3
4
5
6
7
8
9
10
11
12
# 字符串
charAt()
charCodeAt()
fromCharCode()
concat()
indexOf()
lastIndexOf()
match()
replace()
search()
slice()
split()

设计模式
MVC mvvm
简书
掘金

原生js 封装 ajax 方法 get 、 post

Vue watch computed nexttick
双向绑定 虚拟dom
Vue双向绑定原理/组件通讯
Vue 单双向绑定(dep watcher observer)

数组和链表的数据结构的区别
underscore once 实现方法
框架选择
如何避免多重回调 promise,如何在外部进行resolve()
express 中间件
数据结构
算法
栈模拟队列
二分插入进数组
选择框实现原理
异步执行的原理
IE兼容
继承方法
原生 js实现jsonp跨域、深度克隆、模板引擎、正则表达式