"JavaScript面试题总结,涵盖作用域、垃圾回收机制、闭包和变量提升等核心概念。"
在JavaScript中,作用域分为全局作用域和局部作用域。全局作用域通常指的是在`<script>`标签内或外部JavaScript文件中声明的变量,这些变量在整个程序中都是可访问的。而局部作用域主要存在于函数内部或块级作用域(如`if`语句或`for`循环中),在这些区域内声明的变量只能在其内部使用,外部无法直接访问。
作用域链是JavaScript中变量查找的规则,它确保了变量的查找顺序,首先在当前作用域内查找,如果找不到,就会向上一级作用域直至全局作用域。这种机制有助于防止命名冲突并保证代码的隔离性。
垃圾回收机制是JavaScript自动管理内存的方式,主要有引用计数法和标记清除法。引用计数法通过跟踪引用计数来决定何时释放内存,但存在嵌套引用导致的内存泄露问题。标记清除法则通过判断变量的可达性来决定何时释放内存,是目前的主流方法。
闭包是一种特殊的函数,它可以访问并操作其定义时所在的作用域,即使在那个作用域之外调用。闭包常用于封装数据,创建私有变量,但如果不正确使用,可能会导致内存泄露。
变量提升是JavaScript中一个特性,使用`var`声明的变量会被提升到其所在函数或全局作用域的顶部。在实际开发中,为了避免变量提升带来的困扰,推荐使用`let`和`const`进行变量声明。
在函数进阶部分,构造函数是创建对象的一种方式,包括创建新对象、改变`this`指向、执行构造函数体以及返回新对象四个步骤。此外,将伪数组转换为真实数组的方法有`Array.from`、`Array.slice`和展开运算符(`...`)。
JavaScript中的包装类型是指在处理原始值(如字符串、数字)时,JavaScript会自动创建对应的包装对象,如`String`、`Number`和`Boolean`,以便可以调用方法和执行对象特有的操作。这些包装类型在不再需要时会被垃圾回收机制自动清理,以节省内存。理解这些核心概念对于深入学习JavaScript和提高编程效率至关重要。