【发布时间】:2023-03-20 16:03:02
【问题描述】:
尽管存在全局范围的变量,为什么在第一个控制台日志中执行失败?
const message = 'starts with mssg #1'; //Global scope
function scopeTest() {
console.log('1. test #1: ', message); // <-- why unable to read Global scope here?
const message = 'changed to mssg #2';
console.log('2. test #2: ', message);
if (true) { //Code block is OK
const message = 'changed to mssg #3';
console.log('3. test #3: ', message);
}
{ //Another code block is OK
const message = 'changed to mssg #4';
console.log('4. test #4: ', message);
}
console.log('5. test last: ', message);
}
scopeTest();
不需要替代编码解决方案。只是想了解为什么 JS 不能在这个特定函数的开头访问全局变量。
请解释一下。谢谢
【问题讨论】:
-
因为
constis hoisted in its scope,本地message会影响全局。 -
FF 中更有用的错误信息:“message”:“ReferenceError: can't access lexical declaration `message' before initialization”
标签: javascript scope global-variables