javascript - 变量声明是否提升到 if 范围块的顶部?
问题描述
当在 if 块范围内使用关键字 var 声明的变量发生提升时,( var x;) 是否提升到当前 if 块的顶部?或在这种情况下到全局范围的顶部?假设我们直接在全局范围内写了下面这段代码
if (true) {
some code;
var x = 1;
}
解决方案
根据您的示例使用var
(或完全省略定义键,例如 just x = 1
)时,它将被提升到最近的范围,在您的示例中将是全局范围(window
)。
如果它将被包装在一个函数中,那么该函数将是最接近的范围。
function a() {
if(true){
var x=1;
}
console.log(x) // 1
console.log(window.x) // undefined
}
a()
console.log(x) // Throws error (x is not defined)
如果您希望变量完全是块范围,那么您需要使用let
or const
。
if(true){
const x=1;
}
console.log(x) // Throws error (x is not defined)
推荐阅读
- angular - 如何在 NgRx Effect 中调用另一个调度动作?
- python - 计算 pandas 列中每一行有多少个句子
- javascript - DOMException:无法启动视频源 - chrome 85 更新
- python-3.x - 如何使用 lambda 通过函数传递参数
- react-native - 用 redash 和 reanimated 反应原生捏缩放
- spring-boot-chaos-monkey - spring-boot-chaos-monkey - 在同一应用程序的多个实例上更改 assualts/watcher 配置
- apache - 极限挑战失败。来自 http://service.domain1.com/.well-known/acme-challenge/xWsuGIi0JmuEuDzS5qPkVX3oHuzY2kNl0YGoU6HltRg 的无效响应
- python - 如何获得 groupby 组内的平均事务数?
- azure-devops - Azure DevOps 在赛普拉斯测试管道中获得 403(禁止)
- rest - 在 RESTful API 中识别单个资源的多种方法