1、预解析
(1)变量提升
function foo() {
var a = 1;
console.log(a); //1
console.log(b);//undefined
var b = 2;
}
foo();
在作用域内变量、函数会被提升声明 先声明 等代码执行阶段再赋值
js是这样解析的
function foo() {
var a;
var b;
a = 1;
console.log(a); // 1
console.log(b); // undefined
b = 2;
}
foo();
(2)变量提升与函数提升的顺序
让我们看看规则:
1. 变量声明、函数声明都会被提升到作用域顶处;
2. 当出现相同名称时,优先级为:变量赋值>函数声明>变量声明
// 代码段1
function foo() {
var a;
function a() {}
console.log(a);
}
foo(); //没有赋值操作,值为a(){}
// 代码段2
function foo() {
var a = 1;
function a() {}
console.log(a);
}
foo(); //有赋值操作,值为1
所以变量一旦有赋值,优先级在