吊装和关闭 - 混淆
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
不同
吊装:
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