预解析机制

js在预解析阶段先找所有声明,如果是var  先给var后的变量定一个undefind  如果是function 就把function当做字符创赋给函数名

如果名字形同的情况function会把覆盖var   后面function会覆盖前面function

1. 定义

预解析:在当前作用域下,js运行之前,会把带有var和function关键字的事先声明,并在内存中安排好。然后再从上到下执行js语句。

预解析只会发生在通过var定义的变量和function上。


2. var

通过var关键字定义的变量进行预解析的时候:都是声明declare,不管它有没有赋值,都会赋值undefined。

1                 alert(a);   //弹出function a(){alert(4)}
2         var a = 1;
3         function a(){alert(2)};
4         alert(a);//弹出1
5         var a = 3;
6         function a(){alert(4)};
7         alert(a)//弹出3                

只要是通过var定义的,不管是变量,还是函数,都是先赋值undefined,如果是变量,也不管变量有没有赋值,在预解析阶段,都是会被赋值为undefined。

2. function

function进行预解析的时候,不仅是声明而且还定义(define)了,但是它存储的数据的那个空间里面存储的是代码是字符串,没有任何意义。

原文地址:https://www.cnblogs.com/lyWebstrat/p/7121782.html