#JS引擎在运行JS代码时分为两步: 1.预解析 2.执行代码
1.预解析 ①js引擎会把js里面所有的var和function提升到当前作用域的最前面 ②预解析分为变量预解析(变量提升)和函数预解析(函数提升) ③变量提升 :就是把所有的变量声明提升到当前的作用域最前面,不提升赋值操作 ④函数提升:就是把所有的函数声明提升到当前作用域的最前面 ,不调用函数 2.执行代码 ①按照从上往下的顺序执行
//1.
console.log(num);
var num = 0;
//相当于执行了以下代码
var num;
console.log(num); //num的值为undefined
num = 0;
//2.
fun();
var fun = function() {
console.log(22);
}
//相当于执行了
var fun;
fun();
fun = function() {
console.log(22); //报错
}
//3
var num = 10;
fun();
function fun() {
console.log(num);
var num = 20;
}
//相当于执行了
var num;
function fun() {
var num;
console.log(num); //num的值为undefined
num = 20;
}
num = 10;
fun();
//4.
fl();
console.log(c);
console.log(b);
console.log(a);
function fl() {
var a = b = c = 9;
console.log(a);
console.log(b);
console.log(c);
}
//相当于执行了
function fl() {
var a;
a = b = c = 9;
console.log(a); //a的值为9
console.log(b); //b的值为9
console.log(c); //c的值为9
}
fl();
console.log(c); //c的值为9 注意:c和b没有被声明在局部作用域中,故c和b为全局变量,而a被声明了故a为局部变量
console.log(b); //b的值为9
console.log(a); //报错