我知道函數表達式必須表達在頂部,如果你想使用它們而不是函數聲明被懸掛在頂部。爲什麼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