1.浏览器在执行JS代码的时候会分成两部分操作:
预解析以及逐行执行代码,也就是说浏览器不会直接执行代码, 而是加工处理之后再执行。
2.预解析规则:
1.将变量声明和函数声明提升到当前作用域最前面
2.将剩余代码按照书写顺序依次放到后面
3.注意点
通过let定义的变量不会被提升(不会被预解析)
例:
<script>
//解析前:
var a = 666;
test();
function test() {
var b = 777;
console.log(a);
console.log(b);
console.log(c);
var a = 888;
let c = 999;
}
//解析后:
var a;
function test() {
var b;
var a;
b = 777;
console.log(a); // undefined
console.log(b); // 777
console.log(c); // 报错
a = 888;
let c = 999;
}
a = 666;
test();
*/
</script>