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