Heim  >  Artikel  >  Web-Frontend  >  So lösen Sie das Problem einer undefinierten Funktion, wenn die übergeordnete JS-Funktion eine untergeordnete Funktion aufruft

So lösen Sie das Problem einer undefinierten Funktion, wenn die übergeordnete JS-Funktion eine untergeordnete Funktion aufruft

一个新手
一个新手Original
2017-09-25 10:50:312938Durchsuche

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(&#39;pageScroll()&#39;,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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn