我们知道JavaScript代码由浏览器中的JavaScript解析器来执行,
JavaScript解析器在运行JavaScript代
码时分为俩步:预解析和代码执行
预解析:JS引擎会把所有的var还有function提升到当前作用域的最前面,
变量预解析(变量提升)和函数预解析(函数提升)。
变量提升:会把所有的变量声明提升到当前作用域的最前面,不提升赋值操作。
请看以下程序,试写出程序运行结果:
//经典传奇
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);
}
//预解析第一步
function f1(){
var a=b=c=9;
console.log(a);
console.log(b);
console.log(c);
}
f1();
console.log(c);
console.log(b);
console.log(a);
//预解析第二步
function f1(){
var a;
a=b=c=9;//相当于a=9;b=9;c=9;集体声明应该由逗号分开var a=9,b=9,c=0;
//此时a为局部变量,仅在函数内部可用,b和c,虽然在函数内部,但是没声明直接赋值,相当于全局变量
//输出结果为99999报错
console.log(a);
console.log(b);
console.log(c);
}
f1();
console.log(c);
console.log(b);
console.log(a);
结果为9 9 9 9 9 报错,你做对了嘛????