首先预解析包括函数提升和变量提升。
什么情况产生预解析?当页面加载遇到script标签时,用function声明的函数和var 声明的变量会进行全局代码解析和全局代码预解析。
预解析的特点:
-
程序在代码执行之前会先进行预解析;
-
预解析会解析带var的变量和函数声明定义的函数function,解析函数优先级比解析变量要高:
-
可以认为解析的时候分为两步,先去解析所有的函数声明定义的函数,再去解析所有的带var变量;
-
解析过程当中,如果函数重名,会覆盖(后面的函数会把前面的覆盖掉)
如果变量(指的是变量和函数)重名,会忽略;
-
解析函数的时候,函数定义方式不同,解析过程也不大一样:
如果是函数声明定义,整个函数都要被提升
function func(){};
如果是表达式定义,只会提升变量
var func = function(){};