JS面试知识点总结(九)
哪些操作会造成内存泄漏?
相关知识点:
- 1.意外的全局变量
- 2.被遗忘的计时器或回调函数
- 3.脱离 DOM 的引用
- 4.闭包
回答:
第一种情况是我们由于使用未声明的变量,而意外的创建了一个全局变量,而使这个变量一直留在内存中无法被回收。 |
详细资料可以参考:
《JavaScript 内存泄漏教程》
《4 类 JavaScript 内存泄漏及如何避免》
《杜绝 js 中四种内存泄漏类型的发生》
《javascript 典型内存泄漏及 chrome 的排查方法》
需求:实现一个页面操作不会整页刷新的网站,并且能在浏览器前进、后退时正确响应。给出你的技术实现方案?
通过使用 pushState + ajax 实现浏览器无刷新前进后退,当一次 ajax 调用成功后我们将一条 state 记录加入到 history |
详细资料可以参考:
《pushState + ajax 实现浏览器无刷新前进后退》
《Manipulating the browser history》
如何判断当前脚本运行在浏览器还是 node 环境中?(阿里)
typeof window === 'undefined' ? 'node' : 'browser'; |
把 script 标签放在页面的最底部的 body 封闭之前和封闭之后有什么区别?浏览器会如何解析它们?
详细资料可以参考:
《为什么把 script 标签放在 body 结束标签之后 html 结束标签之前?》
《从 Chrome 源码看浏览器如何加载资源》
移动端的点击事件的有延迟,时间是多久,为什么会有? 怎么解决这个延时?
移动端点击有 300ms 的延迟是因为移动端会有双击缩放的这个操作,因此浏览器在 click 之后要等待 300ms,看用户有没有下一次点击,来判断这次操作是不是双击。 |
有三种办法来解决这个问题:
- 1.通过 meta 标签禁用网页的缩放。
- 2.通过 meta 标签将网页的 viewport 设置为 ideal viewport。
- 3.调用一些 js 库,比如 FastClick
click 延时问题还可能引起点击穿透的问题,就是如果我们在一个元素上注册了 touchStart 的监听事件,这个事件会将这个元素隐藏掉,我们发现当这个元素隐藏后,触发了这个元素下的一个元素的点击事件,这就是点击穿透。 |
详细资料可以参考:
《移动端 300ms 点击延迟和点击穿透》
什么是“前端路由”?什么时候适合使用“前端路由”?“前端路由”有哪些优点和缺点?
(1)什么是前端路由? |
详细资料可以参考:
《什么是“前端路由”》
《浅谈前端路由》
《前端路由是什么东西?》
如何测试前端代码么? 知道 BDD, TDD, Unit Test 么? 知道怎么测试你的前端工程么(mocha, sinon, jasmin, qUnit..)?
详细资料可以参考:
《浅谈前端单元测试》
检测浏览器版本版本有哪些方式?
检测浏览器版本一共有两种方式: |
详细资料可以参考:
《JavaScript 判断浏览器类型》
什么是 Polyfill ?
Polyfill 指的是用于实现浏览器并不支持的原生 API 的代码。 |
详细资料可以参考:
《Web 开发中的“黑话”》
《Polyfill 为何物》
使用 JS 实现获取文件扩展名?
// String.lastIndexOf() 方法返回指定值(本例中的'.')在调用该方法的字符串中最后出现的位置,如果没找到则返回 -1。 |
详细资料可以参考:
《如何更有效的获取文件扩展名》
/img/banner/banner_2.jpeg
评论