面经
for 和 forEach 的区别
- for可以使用break跳出循环,forEach不行
- for可以设置循环的索引,而forEach必须循环所有
forEach 和 map 的区别
相同: 都只能遍历数组,都支持3个参数 :item(当前每一项)、index(索引)、arr(原数组)
不同:map返回一个新数组;forEach返回值为undefined,直接在原数据上操作
1 |
find 和 some 的区别
find返回满足条件的第一项
findIndex,返回符合的第一项的index,找不到便返回-1
some找到符合条件的项后返回布尔值
事件循环、宏任务、微任务
异步任务分为宏任务(由浏览器、node发起)和微任务(js引擎发起)
宏任务包括:script(整体代码)、setTimout、setInterval、setImmediate(node.js环境)、I/O、UI交互事件
微任务包括:new promise().then(回调)、MutationObserver(html5新特新)、Object.observe(已废弃)、process.nextTick(node环境
若同时存在promise和nextTick,则先执行nextTick
- 先执行同步代码,
- 遇到异步宏任务则将异步宏任务放入宏任务队列中,
- 遇到异步微任务则将异步微任务放入微任务队列中,
- 当所有同步代码执行完毕后,再将异步微任务从队列中调入主线程执行,
- 微任务执行完毕后再将异步宏任务从队列中调入主线程执行,
- 一直循环直至所有任务执行完毕。
执行顺序
数组的sort方法
1 | var arr = [1, 22, 15, 32, 4, 5] |
小程序的生命周期
应用的生命周期
- onLaunch
- onShow
- onHide
页面的生命周期
- onLoad
- onShow
- onReady
- onHide
- onUnload
合并数组的方法
- concat
- es6展开运算符 …
- apply (arr1,arr2)
客户端渲染CSR
缺点:
- 首屏加载慢
- 不利于seo
输出下列结果
1 | undefined == null; //true |
前端性能优化
- 浏览器缓存
- 防抖和节流
- 资源懒加载、预加载
- 文件按需加载
- 图片优化,不要有空的图片地址,多采用svg或字体图标、雪碧图(精灵图)
- 将图片的内容以Base64格式内嵌到HTML中,减少http请求的数量
- 减少渲染的次数:缓存
- 减少渲染次数:对dom查询进行缓存、将dom操作合并、使用减少重排的标签
- CSS放在html的
head中,js放在body底部,处理页面布局的文件放在head中,body中尽量不写style和script标签
首屏性能优化
- 首屏不需要展示的大尺寸图片,使用懒加载
- 减小cookie的大小
- 使用服务端渲染 ssr
- 骨架屏
- 精灵图
- 减小http请求
hash和history的区别
- history 利用浏览历史记录的api实现,hash则是监听location对象的hash值变化事件来实现
- history的url没有 #
- 改变 hash 不会重新加载页面
html标签对应的位置
script标签
放在head标签内,浏览器解析时会将下载全部的script,再解析其他的html内容,会导致渲染阻塞。
放在body标签内,浏览器会在在解析完整个html页面后,再下载js,对某些高度依赖js的网站,用户体验差
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 玉玉菠萝!










