JavaScript的预解析
预解析:
-
我们 js 引擎运行 js 分为两步: 预解析 代码执行
(1)预解析 js 引擎会把 js 里面所有的 var 还有 function 提升到当前作用域的最前面。
(2)代码执行 按照代码书写的顺序从上往下执行
-
预解析分为: 变量预解析(变量提升)和 函数预解析(函数提升)
(1)变量提升 就是把所有的变量声明提升到当前的作用域最前面 不提升赋值操作
(2)函数提升 就是把所有的函数声明提升到当前作用域的最前面 不调用函数
8.2 预解析案例
例1:
<script>
var num = 10;
fun();
function fun(){
console.log(num);
var num = 20;
} //undefined
// 以上代码相当于:
var num;
function fun(){
var num;
console.log(num);
num = 20;
}
num = 10;
fun();
</script>
结果:undefined
例2:
<script>
var a = 18;
fn1();
function fn1(){
var b = 9;
console.log(a);
console.log(b);
var a = '123';
}
// 相当于以下代码
var a;
function fn1(){
var b;
var a;
b = 9;
console.log(a);
console.log(b);
a = '123';
}
a = 18;
fn1();
</script>
结果:
undefined
9
<script>
fn1();
console.log(c);
console.log(b);
console.log(a);
function fn1(){
var a = b = c = 9;
console.log(a);
console.log(b);
console.log(c);
}
// 以上代码相当于:
function fn1(){
/* var a = b = c = 9;
// var a = b = c = 9;相当于:var a = 9;b = 9;c = 9; */
var a = 9;
b = 9;
c = 9;
console.log(a);
console.log(b);
console.log(c);
}
fn1();
console.log(c);
console.log(b);
console.log(a);
</script>
结果:
9
9
9
9
9
报错a is not defined
浙公网安备 33010602011771号