预解析部分

96 阅读1分钟

javascript代码是由浏览器的javascript解析器来执行的,javascript解析器在运行时也分为两步:预解析和代码执行

预解析

js会把里面所有var还有function提升到当前作用域的最上面,最前面

然后再代码执行

变量提升

就是把所有声明变量提升到当前作用域最前面 但是不提升赋值操作

例:

console.log(num);  //打印undefined
var num =10;

解析:
上面的代码由于变量提升相当于进行了这么一步操作
var num;
console.log(num);  //因为声明了但是没有赋值所以才会返回undefined 
num =10;

第二个例子:
num();
var num = function() {

}


解析:
上面的代码进行了这么一步操作
var num;
num();//因为上面根本没有这样一个函数体,所以报错   反正就记住在用匿名函数的时候,调用一定要写在函数体下面
num = function(){
}

函数提升

就是把函数声明提升到当前作用域的最前面,但是不调用函数

例:

num1();
 function num1() {
 //省略
 }


解析:
因为会把函数声明提升到最前面,所以就算你这么写最后机器分析时还是
function num1() {
 //省略
 }
 num1();
 这种格式
 
 
 这个时候有个重点,只有用关键字声明的才可以,赋值方法(匿名函数),他就不会提升,这是重点,一定不要搞混了

课程练习

var num =20;
        function num1() {
          console.log(num);
          var num =20;
          console.log(num);
        }
        num1();

        上面代码等于做了以下操作:
        var num;//这一步是变量提升
        function num1() { //这一步是函数提升
            var num //这一步是变量提升
          console.log(num);
          num =20;
          console.log(num);
        }
        num =20;
        num1();
        最后输出undefined20