我在这里对可变提升概念有点困惑。为什么第一个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 )
})();Run Code Online (Sandbox Code Playgroud)
在 JS 中,我们也有函数作用域,并且由于两个作用域中的变量名称相同,全局flag被覆盖,因此第一个 console.log(flag) 输出未定义。考虑这段代码:
(function(){
console.log(flag);
var flag = true;
})
Run Code Online (Sandbox Code Playgroud)
应用变量提升概念,这将在内部变成这样:
(function(){
var flag=undefined;
console.log(flag);
flag = true;
})
Run Code Online (Sandbox Code Playgroud)
您会因为外部作用域flag变量而感到困惑,但flag由于使用了相同的命名约定,它将被功能作用域变量覆盖。
| 归档时间: |
|
| 查看次数: |
152 次 |
| 最近记录: |