js基础面试题
时间: 2025-04-25 11:35:56 AIGC 浏览: 16
### JavaScript 基础面试题
#### 变量声明关键字的区别
在JavaScript中,`var`, `let` 和 `const` 是用于声明变量的关键字。它们之间存在显著差异:
- **作用域**:`var` 关键字具有函数级作用域或全局作用域;而 `let` 和 `const` 则拥有更严格的块级作用域[^3]。
- **重复声明处理**:尝试在同一范围内多次使用相同名称通过 `let` 或者 `const` 来定义会抛出错误,但是这不会发生在 `var` 上。
- **初始化需求**:`const` 要求立即赋初值,并且一旦设定就不能改变其绑定的对象/原始值本身(注意不是指对象内部属性不可变)。相比之下,`var` 和 `let` 不强制要求即时初始化[^4]。
```javascript
// 使用 var 定义
for (var i = 0; i < 5; ++i) {
console.log(i);
}
console.log('Outside:', i); // 输出 Outside: 5
// 使用 let 定义
for (let j = 0; j < 5; ++j) {
console.log(j);
}
console.log('Outside:', j); // ReferenceError: j is not defined
```
#### 数据类型的分类
JavaScript 中有七种基本数据类型以及一种特殊的数据结构——对象。这些包括但不限于布尔型 (`boolean`)、数值型 (`number`)、字符串 (`string`)、未定义 (`undefined`)、空值 (`null`)、大整数 (`bigint`) 和符号 (`symbol`) 类型。其中 `null` 表示有意不存在任何对象值的状态,而 `undefined` 意味着某个尚未被赋予实际意义的位置。
#### 继承机制概述
JavaScript 支持基于原型链的单继承模型。当访问一个实例成员时,如果该实例自身没有此成员,则会在它的构造器所关联的原型对象上去寻找相应的特性直到找到为止或者到达最顶层 Object.prototype 的末端。此外还有多种实现多态性的技术手段如借用构造函数法、组合式继承等[^6]。
#### this 关键词解析
`this` 在不同的上下文中代表不同含义,在非严格模式下调用普通函数时它通常指向全局环境下的 window 对象;作为方法调用的一部分时则指向当前执行环境中最近一层的对象实体;箭头函数内的 `this` 将始终沿袭外围封闭范围中的那个特定引用而不是依据具体的调用方式来决定[^7]。
#### new 运算符的工作流程
每当遇到带有 `new` 的表达式创建新实例的时候会发生如下过程:
1. 创建一个新的空对象;
2. 设置这个新建对象的 [[Prototype]] 属性使其链接至指定构造器对应的 prototype 成员上;
3. 执行构造体内部代码给新的实例添加自定义字段并返回最终形成的完整个体[^10]。
阅读全文
相关推荐













