预解析
在执行代码之前做的事
变量的声明和函数的声明被提前了,变量和函数的声明会提升到当前所在的作用域的最上面
函数中的变量声明,会提升到该函数的作用域的最上面(函数里面)
如果有多对的script标签都有相同名字的函数,预解析的时候是分段的,互不影响
f1();
console.log(c);
console.log(b);
console.log(a);
function f1() {
var a = b = c = 9;
console.log(a);
console.log(b);
console.log(c);
}
结果
预解析时,f1函数自动提前。同时函数体里的var a;也自动提前
成为了局部变量。b、c成为了隐式全局变量
function f1() {
//a使用var成为了局部变量,只能在函数内部使用
var a;
a = 9;
//b、c都是隐式全局变量,函数外部可以使用
b = 9;
c = 9;
console.log(a);
console.log(b);
console.log(c);
}
f1();
console.log(c);
console.log(b);
//没有对变量a进行定义所以报错
console.log(a);