技术文摘
一道诡异的 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 的编程世界中游刃有余。
- Spring Boot 与 Kafka 实战轻松入门
- AR 商用迟缓 Magic Leap 惊现大规模裁员
- 基于 Reveal.js 与 Git 的网页创建教程
- 代码中众多“烦人”的 if else 令人头疼
- 8 款备受青睐的代码编辑器 你不容错过
- 这篇文章让 Python 编码不再是噩梦
- 开发得力助手:在线工具推荐
- 10 款 Java 程序员必掌握的开源工具
- Python 中环比增长率的计算方法
- 谈一谈 Go 协作与抢占
- 好组件应有的模样
- 几个事例足以证明 for...of 循环在 JS 中的不可或缺性
- GitHub 账户频遭专门窃取 开发者需警惕此类钓鱼活动
- Serverless 实战:20 行 Python 代码实现图像分类与预测
- Scala 循环性能与代码可维护性的权衡