JavaScript预解析过程

来源:互联网 发布:软件注册赚钱靠谱吗 编辑:程序博客网 时间:2024/06/06 05:30

我们经常在面试题中看到这样的问题

 var a=18;

        f1();

        function f1(){

              var b=9;

              console.log(a);

              console.log(b);

              var a="123";

        }

 

大家可以思考一下上面的代码到底输出什么?

答案是:undefined  9。你写对了吗?

有些人的答案可能是18 ,9。对此答案可能想不通,下面介绍一下浏览器到底是怎么进行解析的?

首先,一段代码发到浏览器,浏览器会先进行预解析,其过程是:先找到全局作用域,然后在其中找声明,也就是var和function,把它们提前,再接着从上到下顺序执行。如果遇到function中也有声明和子function,也按照刚才的方法进行排序,然后再执行代码。

上面的代码例子,可以分布进行,第一步,找全局作用域:

var a;

function f1(){

   

var b=9;

console.log(a);

console.log(b);

vara="123";

}a=18;f1();

第二步,找次级作用域:

var a;

function f1(){

var b;

var a; 

b=9;

console.log(a);

console.log(b);

 a="123";

}   a=18;   f1();

输出结果:

 最后,很容易看出其中a一个是全局变量,一个是局部变量,但是函数里面的那个a只声明但是没有赋值,所以输出为undefined,而b在声明变量后又在输出之前赋值了所以输出9。
以上就是预解析过程分析,掌握 了之后就不容易在写代码过程出现不能找到的错误了!

 

原创粉丝点击