我对JavaScript范围有一些了解 - 该语言具有函数级范围,并且变量和函数声明被提升到其包含范围的顶部.但是,我无法弄清楚为什么以下两段代码记录不同的值:
这会将值1记录到控制台:
var a = 1;
function b() {
a = 10;
return;
function a() {}
}
b();
console.log(a);
Run Code Online (Sandbox Code Playgroud)
神秘的是,这记录10:
var a = 1;
function b() {
a = 10;
return;
}
b();
console.log(a);
Run Code Online (Sandbox Code Playgroud)
那么引擎盖下面发生了什么?