正常瀏覽器環境下, 如果在不加載babel等轉義文件的前提下, 開發者如果在準備就緒函數中(如:onload() 或者 $.jQuery.ready())註冊函數(fn), 那麼調用的時候可能找不到(實例化對象除外).
原因就在於, 事件和函數的綁定關係. DOM渲染完畢之前, JS的onload和ready方法肯定沒有運行; 但是渲染的時候就已經在JS中尋找已經註冊過的函數,去和DOM綁定在一起. 此時, 由於fn仍未在JS中註冊, 故綁定在DOM上的函數其實爲空(也就是"未註冊").
注意: 渲染引擎和JS加載引擎是同時運行的
其實說穿了就是加載順序的問題, DOM在JS準備就緒函數之前加載, 所以找不到註冊函數.解決辦法也很簡單:
函數註冊寫到頂級作用域(window)下面