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)了,但是它存储的数据的那个空间里面存储的是代码是字符串,没有任何意义。