JavaScript 43道面试题和答案.docx

preview
需积分: 0 0 下载量 103 浏览量 更新于2023-06-15 收藏 25KB DOCX 举报
JavaScript是一种广泛用于网页和网络应用的编程语言,尤其在前端开发中占据核心地位。面试中,JavaScript的知识点考察通常涉及语法、变量作用域、函数、对象、数据类型转换等多个方面。以下是一些基于题目提供的面试题及答案的深入解析: 1. **变量提升与暂时死区**: - 在JavaScript中,`var`声明的变量会在作用域的顶部提升,但未赋值,因此默认值是`undefined`。在示例中,`name`被`var`声明,所以在`sayHi`函数内部,`name`在执行时虽然被声明,但未赋值,所以打印`undefined`。 - `let`和`const`声明的变量也有提升,但它们的初始化不会提升,这就形成了所谓的“暂时死区”(Temporal Dead Zone,TDZ)。在TDZ内尝试访问这些变量会导致`ReferenceError`。例如,尝试在声明之前访问`let`变量会抛出错误。 2. **变量的赋值过程**: - 变量的赋值分为三个阶段:创建、初始化(默认为`undefined`)和真正赋值。`let`的创建被提升,但初始化不被提升;`var`的创建和初始化都被提升;而函数的创建、初始化和赋值都提升。 3. **作用域与闭包**: - `for`循环中,`var i`声明的变量是全局作用域,因此在`setTimeout`回调中,所有回调都共享同一个`i`,最后输出`333`。 - 使用`let`声明的`i`则有块级作用域,每次循环都会创建一个新的`i`,所以输出`012`。 4. **箭头函数与`this`**: - 箭头函数不绑定自己的`this`,它会捕获其所在(定义时)上下文的`this`值。因此,`shape.diameter()`返回`20`,因为它内部的`this`指向`shape`对象。而`shape.perimeter()`返回`NaN`,因为它是箭头函数,`this.radius`在箭头函数中未找到,导致`undefined`乘以`Math.PI`的结果。 5. **数据类型转换**: - 一元操作符`+`会尝试将布尔值转换为数值,`true`转为`1`,`false`转为`0`。 - 字符串`"Lydia"`在布尔上下文中被视为真值,因此`!"Lydia"`相当于`!true`,返回`false`。 6. **错误选项分析**: - 题目未提供完整选项,但从给出的部分来看,可能是在讨论对象属性的访问。在JavaScript中,对象可以通过`.`操作符访问属性,如`bird.size`。如果属性不存在,访问会返回`undefined`,而不是`false`或`NaN`。 这些面试题覆盖了JavaScript的基础和进阶概念,包括变量作用域、函数行为、数据类型转换等核心知识点。理解并熟练掌握这些内容对于成为一名优秀的JavaScript开发者至关重要。在实际开发中,理解这些原理能够帮助解决许多常见的编程问题。
身份认证 购VIP最低享 7 折!
30元优惠券