Javascript 为什么这个匿名函数会看到什么';它在下面吗?

Javascript 为什么这个匿名函数会看到什么';它在下面吗?,javascript,Javascript,为什么第一个匿名函数可以“看到”它下面的函数,例如foo?难道它不应该只看到它上面的东西吗?谢谢 window.onload = function(){ foo(); } function foo(){ alert("hello"); } 见: JavaScript中的函数声明是函数定义的基础。您可以在声明函数之前使用它: hoisted(); // logs "foo" function hoisted() { console.log("foo"); } 这是由于

为什么第一个匿名函数可以“看到”它下面的函数,例如
foo
?难道它不应该只看到它上面的东西吗?谢谢

window.onload = function(){
    foo();
}

function foo(){
    alert("hello");
}
见:

JavaScript中的函数声明是函数定义的基础。您可以在声明函数之前使用它:

hoisted(); // logs "foo"

function hoisted() {
   console.log("foo");
}

这是由于。在JavaScript中,函数声明被“提升”到其作用域的顶部,正如您所注意到的,这允许调用文件中任何位置声明的函数。

函数(和变量)声明在执行任何代码之前被处理,也称为“提升”。@Barmar尽管使用了相同的语言机制,另一个问题是不同的。我会责怪移动客户端中的缓存。不仅仅是函数声明,变量声明(不是初始化值)也被提升到其封闭范围的顶部。因此,
var f=function(){…}
也将提升。不是值(函数),而是变量(
f
)。不是赋值,而是声明。