Uncaught ReferenceError: XXX is not defined意思是函數XXX()就沒有被定義。
js里出現Uncaught ReferenceError: XXX is not defined的錯誤,大概率是你把函數放在了window.onload里面。
出現這個問題的原因是:
1.window.onload事件是在整個頁面包括dom結構、圖片等等全部加載完成之后才會觸發。把函數寫在這里邊是為了防止html還沒加載完就執行了代碼,但是如果你寫在一個自己定義的函數中,那函數中的代碼是在你調用這個函數的時候才會執行的。
2.如果將你自己的函數寫在window.onload里,那么這個函數的作用域就僅僅是window.onload中,該函數是在一個匿名函數內部的局部函數,並不是全局函數,所以你調用時會顯示未定義,類似java那個內部類。
3.HTML加載時由上往下的,在HTML加載的時候,遇到function關鍵字,聲明一個函數的時候,就會在內存中開辟一個新的空間來對函數進行存儲,方便以后進行調用。
所以,當將function XXX()寫到window.onload()=function(){}內部的時候,需要整個頁面加載完成的之后,才聲明這個函數,也就意味着,當HTML加載到調用函數的時候,window.onload=function(){}里面的函數XXX還沒有被聲明,這時候內存中就找不到function XXX(),於是會報錯。
解決方法有兩種:
1.將function XXX()移到window.onload()=function(){}外面,則HTML加載到的時候就會聲明函數XXX()了,所以進行綁定的時候就能夠在內存中找到XXX()並進行調用。
2.用var XXX在window.onload()=function(){}外面先進行聲明。作用域發生了變化,就可以進行調用。
作者:MaJiaLe
鏈接:https://www.jianshu.com/p/37bc8fb2b35c
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。