技术文摘
一道诡异的 JS 面试题与“作用域”及“提升”
一道诡异的 JS 面试题与“作用域”及“提升”
在 JavaScript 编程领域,面试时常常会遇到一些看似诡异,实则深入考察核心概念的题目。今天,我们就来探讨一道这样的面试题,它与“作用域”和“提升”这两个重要概念紧密相关。
题目是这样的:
console.log(a);
var a = 10;
请问输出结果是什么?
对于初学者来说,可能会认为会输出 10 。但实际上,输出的结果是 undefined 。这就涉及到 JavaScript 中的变量提升概念。
在 JavaScript 中,使用 var 声明的变量会被提升到其所在作用域的顶部。但需要注意的是,变量提升只是提升了变量的声明,而没有提升变量的初始化。所以,在上述代码中,变量 a 的声明被提升到了顶部,但初始化 a = 10 仍在原来的位置。
当执行 console.log(a) 时,此时变量 a 已经被声明,但尚未被初始化,所以其值为 undefined 。
再来看作用域的影响。JavaScript 中有全局作用域和函数作用域。如果上述代码处于一个函数内部,那么情况又会有所不同。
在函数作用域中,同样遵循变量提升的规则。但如果在函数内部还有同名的局部变量和全局变量,那么局部变量会覆盖全局变量。
理解“作用域”和“提升”对于编写正确、高效的 JavaScript 代码至关重要。它们能帮助我们避免一些常见的错误,例如意外的变量未定义错误或者变量值不符合预期的情况。
在实际开发中,为了避免由于变量提升和作用域带来的困惑和错误,现代 JavaScript 引入了 let 和 const 关键字。它们具有块级作用域的特性,并且不会发生变量提升。
这道诡异的面试题虽然看似简单,却能很好地检验面试者对于 JavaScript 中“作用域”和“提升”这两个关键概念的理解程度。只有深入掌握这些概念,才能在 JavaScript 的编程世界中游刃有余。
- 面试官:是否知晓缓存击穿、穿透、雪崩?
- 函数指针的若干应用场景
- Vue3 六大高级知识技巧
- 精准把控.NET 依赖注入:轻松实现 DI 自动注册服务
- 谈谈 Powerjob 的单机线程并发度
- 傅里叶变换算法的 Python 代码实现
- 面试官所问:微服务通讯方式有哪些
- 纯 CSS 打造冒泡排序动画的实现之旅
- 浅析虚拟机中部分内网穿透功能的实现途径
- 面试官为何询问 ThreadLocal 中键为弱引用的原因
- C++ 实用的加密库:Crypto++
- Python 高级排序技巧:Sort() 函数的更多应用
- Vue3 里的 Suspense:异步组件加载及占位符管控
- C++中的列表初始化,你了解多少?
- 共议移动端样式适配之法