Der Inhalt dieses Artikels ist eine detaillierte Einführung (Codebeispiel) über den Umfang in JavaScript. Ich hoffe, dass er für Sie hilfreich ist. hat geholfen.
Fast alle Programmiersprachen haben das Konzept des Umfangs. Worauf bezieht sich der Umfang also genau? Der Bereich ist ein Satz von Regeln für die Speicherung und den Zugriff auf Variablen, wenn eine Programmiersprache Variablen definiert. Schauen wir uns als Nächstes an, wie dieser Satz von Regeln festgelegt wird >
KompilierungsprinzipIn traditionellen kompilierten Sprachen gibt es vor der Codeausführung einen Kompilierungsprozess:
Wortsegmentierung/lexikalische Analyse: Codeanweisungen in sinnvollen Code zerlegen Blöcke, auch lexikalische Einheiten genannt.Scope hat im Allgemeinen zwei Arbeitsmodelle, das erste wird von den meisten Programmiersprachen verwendet. Der andere Typ von Der verwendete lexikalische Bereich wird als dynamischer Bereich bezeichnet. Beispielsweise verwendet das Bash-Skript einen dynamischen Bereich. Der lexikalische Bereich wird durch den Ort bestimmt, an dem Sie Variablen schreiben, und den Bereich, den Sie beim Schreiben von Code blockieren. Er wird durch die Position der Variablendefinition bestimmt, während der dynamische Bereich durch die Verwendung von Variablen bestimmt wird nach dem Standort. Schauen wir uns ein Beispiel an:
function foo(a) { var b = a * 2; function bar(c) { console.log(a, b, c) } bar(b * 3) } foo(2)
Lassen Sie uns zunächst analysieren, wie viele Bereiche es insgesamt gibt?
Globaler Bereich, der die Variable foo enthältFunktionsbereich bedeutet, dass alle zu dieser Funktion gehörenden Variablen im Rahmen der gesamten Funktion verwendet und wiederverwendet werden können. Das wissen wir die Definition, aber welchen Nutzen hat die Existenz eines Funktionsumfangs? Schauen wir uns als Nächstes die Sekunden des Funktionsumfangs an.
Interne Implementierung ausblenden
Interne Implementierung ausblenden bedeutet, Variablen und Funktionen in den Funktionsbereich einzuschließen, um den Zweck des Ausblendens zu erreichen. Im Softwaredesign gibt es ein sehr bekanntes Prinzip namens „Prinzip der minimalen Offenlegung“, das sich darauf bezieht, den erforderlichen Inhalt auf ein Minimum zu beschränken und andere Inhalte, wie z. B. das API-Design von Modulen oder Objekten, auszublenden. Verwenden Sie den Funktionsbereich, um Variablen und Funktionen zu umschließen, um das Prinzip der minimalen Offenlegung zu erreichen und direkten externen Zugriff zu verhindern:
function doSomething(a) { b = a + doSomethingElse( a * 2 ); console.log( b * 3 ); } function doSomethingElse(a) { return a - 1; } var b; doSomething( 2 ); // 15”
In diesem Code sollten doSomethingElse und b privat in doSomething sein, aber Wenn sie nicht offengelegt werden, führt dies dazu, dass sie in unerwarteter Form verwendet werden und zu unerwarteten Ergebnissen führen. Ein vernünftigeres Design sollte darin bestehen, diese privaten Inhalte in doSomething zu verbergen, wie zum Beispiel:
function doSomething(a) { function doSomethingElse(a) { return a - 1; } var b; b = a + doSomethingElse( a * 2 ); console.log( b * 3 ); } doSomething( 2 );
wie folgt: Auf doSomethingElse kann auch nicht von außerhalb von doSomething zugegriffen werden, aber es gibt auch einige Probleme. Erstens wird die Funktion doSomething im globalen Bereich deklariert, wodurch die globale Rolle verschmutzt wird Vermeiden Sie dies? Kann der verschmutzte Bereich selbst ausgeführt werden, ohne ihn aufzurufen? Die Antwort ist ein Funktionsausdruck. Sehen Sie sich das folgende Beispiel an:
(function doSomething(a) { function doSomethingElse(a) { return a - 1; } var b; b = a + doSomethingElse( a * 2 ); console.log( b * 3 ); })(2)
Schauen Sie sich zunächst (function doSomething(){}) an, bei dem es sich um einen Funktionsausdruck handelt, der sich von der Funktionsdeklaration unterscheidet und in Klammern steht then (function doSomething(a){})() ruft nach Wert auf, damit es selbst ausgeführt werden kann und den Gültigkeitsbereich nicht verschmutzt. Die Community hat einen Begriff für diese Verwendung definiert: IIFE, was für „Immediate Execution of Function“ steht Ausdruck
块作用域
除JavaScript外很多编程语言都支持块作用域,尽管你可能写过很伪块作用域形式的代码,最常见的就是for循环:
for(var i=0; i<10; i++) { console.log(i) }
写这段代码通常是希望变量i在循环内部使用,但是实际上i会被绑定到外部作用域中,要确保没有在作用域的其他地方意外使用i,就只能依靠自觉,这时候块级作用域就显得尤为有用,ES6改变了现状,引入了新的let、const关键字,let关键字可以将变量绑定到所在的任意作用域中,也就是let为其声明的变量隐式地创建了作用域:
for(let i=0; i<10; i++) { console.log(i) } console.log(i) // ReferenceError
这时候i就只会在for循环的内部有效
Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in den Bereich in JavaScript (Codebeispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!