我知道函数表达式必须表达在顶部,如果你想使用它们而不是函数声明被悬挂在顶部。为什么window.onload允许我使用函数作为函数表达式使用?
当我使用window.onload调用我的构造函数时,它可以工作。但是,如果我没有window.onload,并且在我的函数表达式之前调用我的构造函数,代码会中断。
<script type="text/javascript">
window.onload = function() {
var c = new C();
} // this works, but if i delete window.onload the code breaks.
var C = function() {
console.log("test");
};
</script>
'var C' *声明*仍然悬而未决,即使函数本身不是。所以执行过程是:'var C'声明** => **窗口'load'事件监听器被指定(但还没有运行 - 窗口没有完成加载)** => **函数被分配给' C' ** => **窗口'load'事件触发(您的函数已被分配给'C')。 – Shai 2014-09-10 15:05:41
小心阅读QA链接到的答案和评论(接受的答案不是很好) – 2014-09-10 15:05:56
让我们做一个更简单但等同的例子:var foo = function(){alert(bar); }; var bar = 42; FOO();'。你认为这里会发生什么? “alert”会正常工作吗? – 2014-09-10 15:10:24