JS函数预解析经典例题
预解析:只有function会被提升到预解析,函数表达式var a = function()不会被提升。
例题:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<script>
console.log(a);
var a = 1;
console.log(a);
function a() {
console.log(2);
}
console.log(a);
var a = 3;
console.log(a);
function a() {
console.log(4);
}
console.log(a);
a();
</script>
</body>
</html>
运行结果:
可以理解为:预解析过后的代码顺序如下:
//第一个函数a被提升
function a() {
console.log(2);
}
//第二个函数a被提升,第一个函数a被覆盖
function a() {
console.log(4);
}
//打印第二个函数a
console.log(a);
//函数a被重新赋值为1,此时a不再是函数,而是一个值
var a = 1;
console.log(a);
console.log(a);
//a被重新赋值为3
var a = 3;
console.log(a);
console.log(a);
//调用函数a,此时a = 3,已经不存在函数a了
a();