ES5中, 函數未註冊(Uncaught ReferenceError: fn is not defined)

正常瀏覽器環境下, 如果在不加載babel等轉義文件的前提下, 開發者如果在準備就緒函數中(如:onload() 或者 $.jQuery.ready())註冊函數(fn), 那麼調用的時候可能找不到(實例化對象除外).

原因就在於, 事件和函數的綁定關係. DOM渲染完畢之前, JS的onload和ready方法肯定沒有運行; 但是渲染的時候就已經在JS中尋找已經註冊過的函數,去和DOM綁定在一起. 此時, 由於fn仍未在JS中註冊, 故綁定在DOM上的函數其實爲空(也就是"未註冊").

注意: 渲染引擎和JS加載引擎是同時運行的

其實說穿了就是加載順序的問題, DOM在JS準備就緒函數之前加載, 所以找不到註冊函數.解決辦法也很簡單:

函數註冊寫到頂級作用域(window)下面

發佈了27 篇原創文章 · 獲贊 4 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章