网上说预编译的最后一步几乎都是:找到函数声明,将函数名当作 AO 对象的属性,对应属性的值为函数体。
按照这样的理解,下面的调用 bar 肯定是成功的。
function foo() {
bar()
function bar() {}
}
foo()
稍微修改一下。
function foo() {
bar() //bar is not a function
{
function bar() {}
}
}
foo()
如上所示,bar 的值不是一个 function,而是 undefined。
为什么 bar 是 undefined ?