javascript在执行时会经历两个阶段.
- 编译阶段.
- 执行阶段.
在编译阶段, 变量申明和函数申明, 都会提升到当前作用域的顶部,
注意:
- 函数提升优先于变量提升.
- 函数表达式不会被提升. (具名表达式函数也不会被提升).
- 函数标识符和变量标识符重名时, 变量声明将会被忽略.
- 在普通块中函数声明, 将会被提升到所在的作用域顶部.
foo(); // "b"
var a = true;
if (a) {
function foo() { console.log("a"); }
}
else {
function foo() { console.log("b"); }
}
评论 (0)