Heim >Web-Frontend >js-Tutorial >So lösen Sie das Problem einer undefinierten Funktion, wenn die übergeordnete JS-Funktion eine untergeordnete Funktion aufruft
Zuerst wird eine globale Funktion Locating definiert und eine lokale Funktion pageScroll wird innerhalb von Locating definiert. Wenn meine globale Funktion pageScroll aufruft, wird dann der Fehler Uncaught ReferenceError: pageScroll ist nicht definiert gemeldet.
Der Code lautet wie folgt:
function Locating(locate,time){ console.log(locate+' -- '+time); var p_locate=document.getElementById(locate); var window_top_y = document.body.scrollTop;//获取滚动条顶部距离页面顶部的距离 var element_top_y = p_locate.offsetTop;//获取某元素顶部距离页面顶部的距离 var distance = window_top_y-element_top_y;//当前窗口与顶部的距离 var time = time; var move_distance = time>50?Math.ceil((distance/Math.ceil(time/50))):distance;//每次移动的距离 //每次移动的位移应为distance/duration,要移动的位置为element_top_y, function pageScroll() { var top = document.body.scrollTop;//获取滚动条顶部距离页面顶部的距离 var dis_top = top - element_top_y; window.scrollBy(0,-move_distance); scrolldelay=setTimeout('pageScroll()',50); if(dis_top<=0){ clearTimeout(scrolldelay); } // console.log(dis_top); } pageScroll(); }
Zuerst dachte ich es war eine Frage zur Bereichskette.
Aber der Code mit der gleichen Struktur unten führt keine Fehler aus
function a(){ console.log("a") function b() { console.log("b") } b() }
Gehe zu das Forum und frage Down. Es stellt sich heraus, dass der Grund für den Aufruf des Funktionsmechanismus setTimeout
darin besteht, eval zum Ausführen der ersten Parameterzeichenfolge „action()“ zu verwenden nicht vorhanden, Dann habe ich es zum Testen in eine Objektaktion geändert,
Es stellt sich heraus, dass nach der Ausführung von setTimeout die Ausführungsumgebung automatisch zur Fensterumgebung wechselt , sodass pageScroll erneut aufgerufen wird () einen undefinierten Funktionsfehler verursacht. Die Lösung besteht darin,
als
setTimeout('pageScroll()',50)
bedeutet, dass die Zeichenfolge als Objekt geschrieben wird
Es scheint, dass bei der Ausführung von setIntraval auch die Umgebung auf das Fensterobjekt umgestellt wird 🎜>Das obige ist der detaillierte Inhalt vonSo lösen Sie das Problem einer undefinierten Funktion, wenn die übergeordnete JS-Funktion eine untergeordnete Funktion aufruft. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!