前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
开发者导航
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
开发者导航
  • 1 自检100题
    • 1. 输出是什么?
    • 2. 输出是什么?
    • 3. 输出是什么?
    • 4. 输出是什么?
    • 5. 哪一个是无效的?
    • 6. 输出是什么?
    • 7. 输出是什么?
    • 8. 输出是什么?
    • 9. 输出是什么?
    • 10. 当我们这么做时,会发生什么?
    • 11. 输出是什么?
    • 12. 输出是什么?
    • 13. 事件传播的三个阶段是什么?
    • 14. 所有对象都有原型。
    • 15. 输出是什么?
    • 16. 输出是什么?
    • 17. 输出是什么?
    • 18. 输出是什么?
    • 19. 输出是什么?
    • 20. 输出是什么?
    • 21. 输出是什么?
    • 22. cool_secret 可访问多长时间?
    • 23. 输出是什么?
    • 24. 输出是什么?
    • 25. 输出是什么?
    • 26. JavaScript 全局执行上下文为你做了两件事:全局对象和 this 关键字。
    • 27. 输出是什么?
    • 28. 输出是什么?
    • 29. 输出是什么?
    • 30. 输出是什么?
    • 31. 当点击按钮时,event.target是什么?
    • 32. 当您单击该段落时,日志输出是什么?
    • 33. 输出是什么?
    • 34. 输出是什么?
    • 35. 下面哪些值是 falsy?
    • 36. 输出是什么?
    • 37. 输出是什么?
    • 38. 输出是什么?
    • 39. JavaScript 中的一切都是?
    • 40. 输出是什么?
    • 41. 输出是什么?
    • 42. setInterval 方法的返回值是什么?
    • 43. 输出是什么?
    • 44. 输出是什么?
    • 45. 返回值是什么?
    • 46. 输出是什么?
    • 47. 输出是什么?
    • 48. 输出是什么?
    • 49. num的值是什么?
    • 50. 输出是什么?
    • 51. 输出的是什么?
    • 52. 输出是什么?
    • 53. 输出是什么?
    • 54. 输出是什么?
    • 55. 输出是什么?
    • 56. 输出是什么?
    • 57. 输出是什么?
    • 58. 输出是什么?
    • 59. 输出是什么?
    • 60. 输出是什么?
    • 61. 输出是什么?
    • 62. 输出是什么?
    • 63. 输出是什么?
    • 64. 输出什么?
    • 65. 输出什么?
    • 66. 使用哪个构造函数可以成功继承Dog类?
    • 67. 输出什么?
    • 68. 输出什么?
    • 69. 输出什么?
    • 70. 输出什么?
    • 71. 如何能打印出console.log语句后注释掉的值?
    • 72. 输出什么?
    • 73. 输出什么?
    • 74. 输出什么?
    • 75. 输出什么?
    • 76. 输出什么?
    • 77. 以下是个纯函数么?
    • 78. 输出什么?
    • 79. 输出什么?
    • 80. 输出什么?
    • 81. 输出什么?
    • 82. 输出什么?
    • 83. 输出什么?
    • 84. 输出什么?
    • 85. 什么样的信息将被打印?
    • 86. 哪个选项是将hasName设置为true的方法,前提是不能将true作为参数传递?
    • 87. 输出什么?
    • 88. 输出什么?
    • 89. 输出什么?
    • 90. 输出什么?
    • 91. 输出什么?
    • 92. 输出什么?
    • 93. 输出什么?
    • 94. 输出什么?
    • 95. 输出什么?
    • 96. 输出什么?
    • 97. 输出什么?
    • 98. 输出什么?
    • 99. 输出什么?
    • 100. 输出什么?
    • 101.输出什么?
  • 2 面试综合汇总
  • 3 Promise面试题
完整面试题地址:
作者:程序员poetry
扫码关注作者公众号:「前端进阶之旅」 每天分享技术干货
前端进阶之旅公众号二维码

JavaScript进阶问题列表

# 进阶问题

# 1. 输出是什么?

function sayHi() {
  console.log(name)
  console.log(age)
  var name = 'Lydia'
  let age = 21
}

sayHi()
@前端进阶之旅: 代码已经复制到剪贴板
  • A: Lydia 和 undefined
  • B: Lydia 和 ReferenceError
  • C: ReferenceError 和 21
  • D: undefined 和 ReferenceError
答案

答案: D

在函数内部,我们首先通过 var 关键字声明了 name 变量。这意味着变量被提升了(内存空间在创建阶段就被设置好了),直到程序运行到定义变量位置之前默认值都是 undefined。因为当我们打印 name 变量时还没有执行到定义变量的位置,因此变量的值保持为 undefined。

通过 let 和 const 关键字声明的变量也会提升,但是和 var 不同,它们不会被初始化。在我们声明(初始化)之前是不能访问它们的。这个行为被称之为暂时性死区。当我们试图在声明之前访问它们时,JavaScript 将会抛出一个 ReferenceError 错误。


# 2. 输出是什么?

for (var i = 0; i < 3; i++) {
  setTimeout(() => console.log(i), 1)
}

for (let i = 0; i < 3; i++) {
  setTimeout(() => console.log(i), 1)
}
@前端进阶之旅: 代码已经复制到剪贴板
  • A: 0 1 2 和 0 1 2
  • B: 0 1 2 和 3 3 3
  • C: 3 3 3 和 0 1 2
答案

答案: C

由于 JavaScript 的事件循环,setTimeout 回调会在遍历结束后才执行。因为在第一个遍历中遍历 i 是通过 var 关键字声明的,所以这个值是全局作用域下的。在遍历过程中,我们通过一元操作符 ++ 来每次递增 i 的值。当 setTimeout 回调执行的时候,i 的值等于 3。

在第二个遍历中,遍历 i 是通过 let 关键字声明的:通过 let 和 const 关键字声明的变量是拥有块级作用域(指的是任何在 {} 中的内容)。在每次的遍历过程中,i 都有一个新值,并且每个值都在循环内的作用域中。


# 3. 输出是什么?

const shape = {
  radius: 10,
  diameter() {
    return this.radius * 2
  },
  
fe
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
开发者导航
  • 1 自检100题
    • 1. 输出是什么?
    • 2. 输出是什么?
    • 3. 输出是什么?
    • 4. 输出是什么?
    • 5. 哪一个是无效的?
    • 6. 输出是什么?
    • 7. 输出是什么?
    • 8. 输出是什么?
    • 9. 输出是什么?
    • 10. 当我们这么做时,会发生什么?
    • 11. 输出是什么?
    • 12. 输出是什么?
    • 13. 事件传播的三个阶段是什么?
    • 14. 所有对象都有原型。
    • 15. 输出是什么?
    • 16. 输出是什么?
    • 17. 输出是什么?
    • 18. 输出是什么?
    • 19. 输出是什么?
    • 20. 输出是什么?
    • 21. 输出是什么?
    • 22. cool_secret 可访问多长时间?
    • 23. 输出是什么?
    • 24. 输出是什么?
    • 25. 输出是什么?
    • 26. JavaScript 全局执行上下文为你做了两件事:全局对象和 this 关键字。
    • 27. 输出是什么?
    • 28. 输出是什么?
    • 29. 输出是什么?
    • 30. 输出是什么?
    • 31. 当点击按钮时,event.target是什么?
    • 32. 当您单击该段落时,日志输出是什么?
    • 33. 输出是什么?
    • 34. 输出是什么?
    • 35. 下面哪些值是 falsy?
    • 36. 输出是什么?
    • 37. 输出是什么?
    • 38. 输出是什么?
    • 39. JavaScript 中的一切都是?
    • 40. 输出是什么?
    • 41. 输出是什么?
    • 42. setInterval 方法的返回值是什么?
    • 43. 输出是什么?
    • 44. 输出是什么?
    • 45. 返回值是什么?
    • 46. 输出是什么?
    • 47. 输出是什么?
    • 48. 输出是什么?
    • 49. num的值是什么?
    • 50. 输出是什么?
    • 51. 输出的是什么?
    • 52. 输出是什么?
    • 53. 输出是什么?
    • 54. 输出是什么?
    • 55. 输出是什么?
    • 56. 输出是什么?
    • 57. 输出是什么?
    • 58. 输出是什么?
    • 59. 输出是什么?
    • 60. 输出是什么?
    • 61. 输出是什么?
    • 62. 输出是什么?
    • 63. 输出是什么?
    • 64. 输出什么?
    • 65. 输出什么?
    • 66. 使用哪个构造函数可以成功继承Dog类?
    • 67. 输出什么?
    • 68. 输出什么?
    • 69. 输出什么?
    • 70. 输出什么?
    • 71. 如何能打印出console.log语句后注释掉的值?
    • 72. 输出什么?
    • 73. 输出什么?
    • 74. 输出什么?
    • 75. 输出什么?
    • 76. 输出什么?
    • 77. 以下是个纯函数么?
    • 78. 输出什么?
    • 79. 输出什么?
    • 80. 输出什么?
    • 81. 输出什么?
    • 82. 输出什么?
    • 83. 输出什么?
    • 84. 输出什么?
    • 85. 什么样的信息将被打印?
    • 86. 哪个选项是将hasName设置为true的方法,前提是不能将true作为参数传递?
    • 87. 输出什么?
    • 88. 输出什么?
    • 89. 输出什么?
    • 90. 输出什么?
    • 91. 输出什么?
    • 92. 输出什么?
    • 93. 输出什么?
    • 94. 输出什么?
    • 95. 输出什么?
    • 96. 输出什么?
    • 97. 输出什么?
    • 98. 输出什么?
    • 99. 输出什么?
    • 100. 输出什么?
    • 101.输出什么?
  • 2 面试综合汇总
  • 3 Promise面试题