造成这个问题主要原因是您把变量声明和变量赋值理解混了。变量声明发生在编译器,而变量赋值发生在执行期。var obj; // 只是变量的声明,发生在编译期,不管您写不写,函数内的变量声明都会提前。js在执行时会对相同变量声明作归纳的处理,以最近的变量赋值作为变量在执行时的值。您这边最近的变量赋值是您传入的全局的o...
实际上输出值会是1,因为当变量声明和函数声明同时存在时,函数声明优先于变量声明,即函数声明会覆盖变量声明。原因在于函数的赋值过程也会提升。那有人可能有疑问,如果将var变成let呢?结果为foo不允许被重复声明。 变量提升的存储位置 执行上下文中存在一个变量环境的对象(Viriable Environment),该对象中保存了变量提升...
✓ 已被采纳 造成这个问题主要原因是您把变量声明和变量赋值理解混了。变量声明发生在编译器,而变量赋值发生在执行期。var obj; // 只是变量的声明,发生在编译期,不管您写不写,函数内的变量声明都会提前。js在执行时会对相同变量声明作归纳的处理,以最近的变量赋值作为变量在执行时的值。您这边最近的变量赋值是...