预解析
在js代码执行之前,js会对代码进行解析,解析时js会从所有代码中找变量和函数的定义,找到后将变量和函数的定义提升到所有代码的最前面。
1,对var关键字:
会把var关键字和变量名提前到当前作用域的最前面,这个时候不赋值。
2,对声明式函数:
会把函数名提前到当前作用域的最前面,并同时赋值为一个函数。
注意:赋值式函数按照var的预解析进行解析。
使用:在下面定义函数,在上面调用函数。
重名问题
1,变量名和变量名重名:以第一个为准,后面定义的没有意义。
2,函数名和函数名重名:以后面的函数为准,也就是后面定义的会把前面定义的覆盖掉。
3,变量名和函数名重名:以函数名为准。
特殊情况
1,如果if条件为假,不执行大括号后面的代码,但是不影响预解析。
2,return后面的代码是不执行的,但是会预解析。
3,预解析会提升定义,不会提升赋值。
4,函数只提升声明式函数,不提升赋值式函数。
5,函数的作用域内也会有预解析。
6,预解析时函数和变量名同名了,会将函数提升,忽略变量的定义
以上为个人总结,如有错误还望指正!谢谢!