函数的预解析
声明function和变量var会先预解析;
案例1
//案例1
var a=1;
fn();
function fn(){
console.log(a)
var a=10;
}
//解析顺序
var a;
function fn(){
var a;
console.log(a)
a=10;
}
a=1
fn();
// 输出undefined
案例2
var a=1;
function fn(){
console.log(a)
var a=10;
console.log(a);
}
fn();
//解析顺序
var a;
function fn(){
var a;
console.log(a)
a=10;
console.log(a)
}
a=1
fn();
//输出 undefined 10
案例3
var a=1;
fn1();
function fn1(){
var b=2
console.log(a);
console.log(b);
var a = 123;
}
//解析顺序:
var a;
function fn1(){
var b;
var a;
b=2
console.log(a);
console.log(b);
a = 123;
}
fn1();
//输出 undefined 2
案例4
fn1();
console.log(c)
console.log(b)
console.log(a)
function fn1(){
var a=b=c=2;
console.log(a);
console.log(b);
console.log(c);
}
//解析如下
function fn1(){
var a=b=c=2;
//上面的声明方式 //var a=2;b=2;c=2; b,c直接赋值是全局变量
//var a=2,b=2,c=2 集体赋值方式,这样才都是局部变量
var