js代码执行分为两个步骤:
- 预解析(提升)
- 代码一行一行执行
预解析阶段:javascript解析器会把所有的变量声明和函数声明提升到当前作用域的最顶部。对于
var a = 11;
这么一条语句,其实会分为两部分:
var a;
和
a =11;
,其中
var a;
会被提升。
提升规则:
- 提升以作用域为单位。
- 优先提升函数function,然后才提升变量var。
- 重复的var提升会被忽略。
- 重复的function声明会被覆盖。
推荐:不要在一个作用域内重复的声明相同的变量和函数
——《你不知道的js》