js 面试
说说对原生 JavaScript 的理解
- JavaScript 实现包含的几个部分
- JavaScript 的语言类型特性
- 解释性脚本语言(对标编译性脚本语言)
- 面向对象(面向过程)
- 事件驱动 / 异步 IO
- 缺少的关键性功能等(块级作用域 、模块、子类型等)
JavaScript ( JS ) 是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。虽然它是作为开发 Web 页面的脚本语言而出名的,但是它也被用到了很多非浏览器环境中,例如 Node.js. JavaScript 是一种基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式和声明式(如函数式编程)风格。了解更多 JavaScript。
谈谈你对 TypeScript 的理解
- 类型批注和编译时类型检查
- 类
- 接口
- 模块
- 装饰器
- 声明文件(类似于 C 中的头文件)
- 对 ES 6 的支持
- 语法提示
比较一下 TypeScript 和 JavaScript,在什么情况下你觉得需要 TypeScript
JavaScript 中几种迭代语法在 Chrome 等现代浏览器中的性能差异
- 考察 for、for...of、for...in、forEach、while、do...while 等
- 可以使用 console.time 和 console.timeEnd 进行测试
- 注意现代浏览器多次执行的性能优化问题
- ++ 和 -- 有没有区别
- 遍历的时候是否存在查找原型链的过程
- 字面量 / 数组 / 对象存储性能有没有什么区别?
- 条件比较多的时候 if-else 和 switch 性能哪个高?
- 高性能的 JavaScript 开发在语法层面你觉得有哪些可以提升性能?
- 如何在代码中减少迭代次数
- 如何实现一个 Duff 装置
如何提升 JavaScript 变量的存储性能
- 访问字面量和局部变量的速度最快,访问数组元素和对象成员相对较慢
- 由于局部变量存在于作用域链的起始位置,因此访问局部变量比访问跨作用域变量更快,全局变量的访问速度最慢
- 避免使用 with 和 catch,除非是有必要的情况下
- 嵌套的对象成员会明显影响性能,尽量少用,例如 window.loacation.href
- 属性和方法在原型链中的位置越深,则访问它的速度也越慢
- 通常来说,需要访问多次的对象成员、数组元素、跨作用域变量可以保存在局部变量中从而提升 JavaScript 执行效率
在 JavaScript 中如何实现对象的私有属性
async / await 和 Promise 的区别
- await 会等待异步代码执行,会阻塞代码(使用时要考虑性能)
- async / await 在调试方面会更加方便