【发布时间】:2021-01-24 18:49:55
【问题描述】:
考虑下面的 JavaScript 代码-
var DEFAULT_RATE=0.01;
var rate=0.04;
function getRate() {
if(!rate) {
var rate=DEFAULT_RATE;
}
return rate;
}
console.log(`Rate is`,getRate());
下面代码的输出是0.01 我从中得出的结论是,变量被提升(并声明为未定义)到与它们使用位置有关的范围的顶部。在 let 和 const 的情况下,它们会进入 TDZ,但这完全是另一回事。
但我也了解到 var 具有全局范围。然后 var show 不允许变量重新声明。
全局作用域不就是包含整个代码的作用域吗?我理解错了吗?
【问题讨论】:
-
请注意,
var本质上是遗留语法,您希望将let和const用于您编写的任何新代码,因为它们是块范围的并且没有var遭受的古怪的范围界定陷阱。话虽如此,你能解释一下你的外卖是基于什么吗?var是函数范围的(因此变量 declaration 在解析时被提升到函数的顶部,同时将 initialization 留在它找到它的位置。如果使它隐藏一个现有的变量,太糟糕了)除非在全局范围内声明,在这种情况下,同样的事情会发生,但是是全局的。 -
这能回答你的问题吗? Why a variable defined global is undefined?
-
这是一个由 if 块内的
var rate=DEFAULT_RATE引起的丑陋的吊装问题,与function getRate() { var rate; if (!rate) {rate=DEFAULT_RATE;} return rate;}相同。getRate将始终返回DEFAULT_RATE.,因为getRate中的 if 语句将始终为真。
标签: javascript