吊装和关闭 - 混淆

hoisting & closure - confusion

吊装:

console.log(h)
var h = 1

这个returnsundefined,由于声明移到了最上面,但是赋值是在console.log()之后赋值的,就像这样:

var h;
console.log(h)
h = 1

现在这个returns1,没看懂,按我的理解应该和上面的一模一样

闭包:为什么 console.log() 作为函数不能访问第一个示例中的全局变量 h

如果有人能帮助我,我会很高兴。 谢谢!

确实这 2 个案例很相似,所以这里发生了什么?

我认为您有点被控制台愚弄了。无论如何,当您执行命令时,您的控制台总是会记录一些东西。您可以阅读此 post 以更好地了解当您执行 h=1;var h=1; 时控制台默认返回的内容。

为什么 console.log() 作为函数不能访问第一个示例中的全局变量 h? : 它实际上访问了全局 h 变量。但是因为 h 还没有赋值,所以 console.log returns undefined 这基本上意味着 h 变量存在但是它的值是未定义的。如果它没有找到 h 变量,它会返回一个错误,指出 h is not defined 这可能令人困惑,但与 undefined

不同