【发布时间】:2020-07-01 21:51:26
【问题描述】:
根据问题:
Understanding let vs. var hoisting 和
Are variables declared with let or const not hoisted in ES6?
我不明白当提升将变量从块范围提升到全局范围时会发生什么。
在我的代码中,我有:
<script>
"use strict";
let PageInit = null;
document.addEventListener("DOMContentLoaded", () => {
PageInit = new IPageInit();
doSomething();
});
function doSomething() {
alert(PageInit.RefreshCounter); // 60 //correct
}
</script>
在全局范围内创建的PageInit 对doSomething() 可见。
但是,如果我这样做:
<script>
"use strict";
document.addEventListener("DOMContentLoaded", () => {
var PageInit = new IPageInit();
doSomething();
});
function doSomething() {
alert(PageInit.RefreshCounter); // referenceError
}
</script>
我没有正确理解提升。我预计块范围内的var PageInit 会被提升到全局范围内,首先是<script> 标记内。
但事实并非如此。
谁能解释为什么不呢?或者它会被吊到哪里?
【问题讨论】:
标签: javascript hoist