代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<script>
a = 1;
function test() {
console.log(a); // undefined
var a = 2;
console.log(a); // 2
}
</script>
<button onclick="test()">test</button>
</body>
</html>
为什么第一个log打印是 undefined 而不是 1?那个全局的 a 应该在这里生效的才对啊
你问题的中的代码可以等价于下面的:
var a = 2;
语句包含了声明变量和给变量赋值,因为变量提升(hositing)会把变量声明提升到函数开始位置,而赋值语句不会提升。所以运行到第一个console.log(a);
时,因为函数已经有 a 变量,就会输出 函数中 a 变量的值,因为只有声明没有初始化,所以是 undefined.