面试题经典案例——js引擎运行机制
js引擎运行机制分为两大补:
第一步:预解析
预解析就是变量var提升和函数function提升
第二步:代码执行
例子:
预解析前
// var num = 10;
// fun();
// function fun(){
// console.log(num);
// var num = 20;
// }
预解析之后
// 预解析代码后
var num;
function fun() {
var num
console.log(num);
num = 20;
}
num = 10
fun();
下面介绍一个经典案例:
f1();
console.log(c);
console.log(b);
console.log(a);
function f1() {
var a = b = c = 9;
// 注意:这里 var a = b = c = 9;不是变量多个赋值,只有a被声明了相当于 var a=9; b=9; c=9 b和c直接赋值,没有被声明,所以当做全局变量看()在哪里都可以用
// 集体声明方式 var a=2,b=2,c=5;用 逗号相隔
console.log(a);
console.log(b);
console.log(c);
}
与解析之后
function f1() {
var a
a = b = c = 9;
// 注意:这里 var a = b = c = 9;不是变量多个赋值,只有a被声明了相当于 var a=9; b=9; c=9 b和c直接赋值,没有被声明,所以当做全局变量看()在哪里都可以用
// 集体声明方式 var a=2,b=2,c=5;用 逗号相隔
console.log(a);
console.log(b);
console.log(c);
}
f1();
console.log(c);//9
console.log(b);//9
console.log(a);//报错:a是局部变量,不可以在全局使用