前端面试宝典:JavaScript核心知识篇重点总结
如何判断两个对象是否相等:
- 在JavaScript中,判断两个对象是否严格相等通常使用===运算符。对于深度相等的判断,需要手动实现递归比较或借助第三方库。
Polyfill:
- Polyfill是为旧浏览器提供新功能的代码片段,用于解决浏览器兼容性问题。
函数副作用:
- 函数副作用指的是函数除了返回结果外,还产生了其他影响。好的函数设计应避免不必要的副作用。
实例方法与静态方法:
- 实例方法:需要通过类的实例化对象来调用。
- 静态方法:可以直接通过类名来调用,无需实例化。
堆与栈:
- 堆:由运行环境管理,用于动态分配内存。
- 栈:先进后出的存储结构,用于存储函数调用和局部变量。
代码复用方式:
进程与线程:
- 进程:是独立的执行单元,拥有独立的内存空间和系统资源。
- 线程:是进程内的执行单元,共享进程的资源。
JavaScript延迟加载:
- 使用defer或async属性的<script>标签,或动态创建DOM元素并插入到文档中,实现按需异步加载。
new操作符:
变量提升:
- JavaScript引擎会将变量声明提升到代码块的顶部,但赋值操作不会提升。
JavaScript执行过程:
- 包括语法分析、预编译和执行阶段,支持异步编程模型,采用单线程执行。
宏任务与微任务:
- 宏任务:同步任务,如setTimeout、setInterval。
- 微任务:异步任务,但优先级高于宏任务,如Promise、process.nextTick。
柯里化:
- 函数分解技术,将多参数函数转换为一系列单参数函数,提高代码可读性和可维护性。
判断数组:
- 使用Array.isArray方法或直接检查对象的length属性。
精度问题:
- 浮点数表示存在误差,可使用BigNum.js、decimal.js等库处理高精度计算。
内存泄漏:
- 不再使用的内存未及时释放导致的内存泄漏问题,JavaScript垃圾回收机制自动管理内存释放。
null与undefined:
- null:表示无值状态,是JavaScript的一个关键字。
- undefined:表示未定义或未找到值。
JavaScript特点:
作用域链:
- 定义变量的可见性和生命周期,用于在嵌套作用域中查找变量。
闭包:
- 函数和其内部作用域的组合,用于数据封装和持久化。可通过在函数退出前销毁不再使用的变量来解决闭包带来的内存泄漏问题。
深拷贝与浅拷贝:
- 深拷贝:拷贝对象及其嵌套对象的内部结构。
- 浅拷贝:仅拷贝对象的第一层属性。
重排与重绘:
- 重排:涉及DOM结构的变化。
- 重绘:涉及样式变化但不改变DOM结构。
事件机制:
- 包括事件流、事件级别、事件代理和事件对象等概念,是JavaScript响应用户操作的流程。事件委托是利用事件冒泡机制优化事件处理的一种技术。
跨域问题:
this指向:
- JavaScript中this的指向取决于函数的调用方式,理解并掌握this的指向规则对于编写可维护的代码至关重要。
apply、call与bind:
- 三者都用于改变函数的this指向,但参数传递方式有所不同。
这些知识点是JavaScript面试中的常见考点,掌握它们将有助于提升面试表现。