我在测试JavsScript的作用域(var、let和const)时,发现了一个奇怪的行为,我真的无法理解。
var write = document.getElementById('demo');
function test() {
var m = 'hello';
}
test();
write.innerHTML = m;
//This doesn't work
在上面的例子中,JS不能访问 var m 从全局范围中本地声明。
var write = document.getElementById('demo');
if(true) {
var m = 'hello';
}
write.innerHTML = m;
//This works
在上述情况下,JS访问 var m 从全局范围中本地声明。
谁能解释一下为什么会这样?
在第一种情况下, var
声明的范围是在函数级别,因此它仅限于 function test
在 第二例如果范围是块范围,因此 var
声明由于 Hoisting
因此在第一种情况下,你不能使用 m
外部函数测试,但在第二种情况下可以这样做。
这是因为 吊装. 还 var
具有功能级范围
var write = document.getElementById('demo');
var m; // m will be undefined here, declared but not initialized
if (true) {
m = 'hello'; // m is initialized her
}
write.innerHTML = m;
<div id='demo'></div>