Heim  >  Artikel  >  Web-Frontend  >  Vertiefendes Verständnis der linken und rechten Abfrage in Javascript

Vertiefendes Verständnis der linken und rechten Abfrage in Javascript

零到壹度
零到壹度Original
2018-04-04 10:41:493947Durchsuche

Dieser Artikel stellt hauptsächlich das tiefgreifende Verständnis der linken und rechten Abfrage in JavaScript vor. Jetzt werde ich es mit Ihnen teilen und als Referenz geben. Folgen wir dem Herausgeber, um einen Blick darauf zu werfen

Werte und Referenzen

Geltungsbereich

  • Im engeren Sinne ist Scope ein Objekt (genauer gesagt sollte es eine Sammlung sein);

  • Im weitesten Sinne Sinn, Bereich ist eine Reihe von Regeln zum Speichern von Variablen und zum einfachen Auffinden dieser Variablen

    • Der Bereich ist für das Sammeln und Verwalten des Bereichs verantwortlich bestehend aus allen deklarierten Bezeichnern. Eine Reihe von Abfragen und die Durchsetzung eines sehr strengen Regelsatzes, der die Zugriffsrechte des aktuell ausgeführten Codes auf diese Bezeichner bestimmt.

Kontext

  • Vorbereitung vor der Ausführung des Codes (globaler Code, Funktionskörper, Evaluierungscode):

    • 1. Förderung (variabler Funktionsausdruck)

    • 2 >

      3. Verbunden mit dem entsprechenden Bereich;
    • Wenn das Codesegment ein Funktionskörper ist, dann zusätzlich: Parameterzuweisung, Argumentzuweisung; 🎜 >
    • Die Beziehung zwischen Geltungsbereich und Ausführungskontext:


  • Ein Geltungsbereich kann mehrere Kontexte enthalten. Es ist möglich, dass es nie einen Kontext gab (die Funktion wurde nie aufgerufen); es ist möglich, dass es einen Kontext gab und dieser nun nach dem Aufruf der Funktion zerstört wird

    • Links/Rechts-Abfrage

Linke Abfrage:

  • Auf der linken Seite des Zuordnungssymbols, wer ist das Ziel der Zuweisungsoperation;

    • Die Beziehung zwischen den realen und formalen Parametern beim Aufruf der Funktion ist eine linke Abfrage; Abfrage der Variablen auf der linken Seite des Gleichheitszeichens. Wenn in der gesamten Bereichskette keine Variablendeklaration gefunden wird, deklariert die js-Engine automatisch eine Variable mit demselben Namen global; die Deklaration dieser Variablen wird jedoch nicht heraufgestuft.

    • Rechte Abfrage:

    • (function(){
          function test(a){
              b=a;
              console.log(b);//2
          }
          test(2);
      })();
      console.log(b);//2
      Die nicht linke Seite des Zuweisungssymbols, wer ist die Zuweisungsoperation Quelle;
  • Abfrage nach Variablen außer der linken Seite des Gleichheitszeichens. Wenn in der gesamten Bereichskette keine Deklaration einer Variablen gefunden wird, wird direkt ein ReferenceError-Fehler ausgelöst

    • Spezielle Rechtsabfrage

    • console.log(a);//ReferenceError: a is not defined
      Strikter Modus und nicht strenger Modus
    • //a并未定义赋值
      console.log(typeof a);//undefined
      RHS und LHS lösen eine ReferenceError-Ausnahme aus
  • ReferenceError Ausnahme ist die gleiche. Im Zusammenhang mit dem Scheitern der Bereichsbeurteilung bedeutet TypeError, dass die Bereichsbeurteilung erfolgreich ist, die Operation für das Ergebnis jedoch illegal oder unzumutbar ist.

    • Rechtsabfrage fragt alle verschachtelten Bereiche ab Wenn die erforderlichen Variablen nicht gefunden werden können, löst die Engine eine ReferenceError-Ausnahme aus. Beachten Sie jedoch, dass typeof keine Ausnahme meldet.

    • Die linke Abfrage befindet sich in der Abfrage aller verschachtelte Bereiche Wenn die erforderliche Variable nicht gefunden werden kann, wird eine Variable mit diesem Namen im globalen Bereich erstellt.

    • wurde nicht deklariert (die Variable kann in keinem Bereich gefunden werden). ), ist das Verhalten dieser beiden Abfragen unterschiedlich

    • Nicht-strikter Modus:

    • Strikter Modus:


    • Sicherheitsverhinderungsmechanismus vom Typ

    • 1. Verwenden Sie die globale Variable DEBUG im Programm als „Debug-Modus“-Schalter. Wir deklarieren var DEBUG =true in der Datei DEBUG.js; diese Datei wird nur während der Entwicklung und des Testens geladen und wird nicht in die Produktionsumgebung geladen; >2. Schreiben Sie Polyfill (Auffüllcode zur Ergänzung der fehlenden Funktion in der aktuellen Betriebsumgebung) für eine fehlende Funktion
    • Verwandte Empfehlungen:
    • if(DEBUG){ //在生产环境中会报错
               console.log("开始调试");
        }  if(typeof DEBUG !== "undefined"){
                console.log("开始调试");    
        }
    • Linke Abfrage und innere Abfrage
    • if(typeof polyfill_a === "undefined"){        //注意这一块不需要var,跟变量的提升有关
                 //这一块需要使用函数表达式而不是函数声明
                 polyfill_a = function(){
                    //功能代码
                 }
         }
    Der Unterschied zwischen linker Abfrage und rechter Abfrage

Das obige ist der detaillierte Inhalt vonVertiefendes Verständnis der linken und rechten Abfrage in Javascript. 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