【发布时间】:2020-07-08 07:02:32
【问题描述】:
我对可变提升概念有点困惑。为什么第一个console.log(flag) 输出undefined?它不应该抓住已经初始化的 false 值向上移动范围链吗?
var flag = false;
(function(){
console.log(flag);
var flag = true; // JavaScript only hoists declarations, not initialisations
console.log(flag);
if(flag){
let name = "John";
const age = "24";
console.log(name);
console.log(age);
}
//console.log(name); //ReferenceError: name is not defined ( as name is block scoped here )
//console.log(age); //ReferenceError: age is not defined ( as age is block scoped )
})();
【问题讨论】:
-
var flag = true是一个单独的声明,它会影响var flag = false。由于这是一个不同的声明,您将获得新的声明。但是由于作业还没有运行,你只会得到undefined。
标签: javascript