Variablenumfang ist ein Thema, das jede Programmiersprache berührt, und es ist auch ein Wissenspunkt, den ein Programmierer beherrschen muss. Ein tiefes Verständnis des Variablenumfangs wird Ihnen beim Schreiben stabiler Programme helfen.
1. Klassifizierung des JavaScript-Bereichs
JavaScript hat zwei Bereiche: global (Fenster) und Funktionsebene (Funktion). Die Funktionsebene (Funktion) sollte nicht als „Blockebene (geschweifte Klammern {} Ebene)“ verstanden werden.
2. Unterscheiden und definieren Sie globale und lokale JavaScript-Variablen
1.1 Variablen, die außerhalb aller Funktionen mit oder ohne das Schlüsselwort var definiert werden, sind globale Variablen. Die globale Variable wird tatsächlich in ein Attribut des Fensterobjekts analysiert, sodass wir in der Methode „window.global variable name“ darauf zugreifen können. Es wird empfohlen, den Variablennamen zu verwenden, um direkt darauf zuzugreifen, sofern dies nicht erforderlich ist. Das folgende Beispiel zeigt die gebräuchlichste Methode zur Definition globaler Variablen:
var msg1='This is message 1'; msg2='This is message 2'; alert(window.msg1); //This is message 1 使用window关键字进行访问 alert(window.msg2); //This is message 2 alert(msg1); //This is message 1 省略window关键字的访问方式 alert(msg2); //This is message 2 function otherFunction(){} //其它一些函数或对象声明代码 var otherObject={};
1.2 Globale Variablen können auch innerhalb einer Funktion (lokale Variablenlaufzeitumgebung) definiert und abgerufen werden. Die Definitionsmethode besteht nicht darin, das Schlüsselwort var zu verwenden, und der Inhalt der globalen Variablen kann leicht in der lokalen Umgebung abgerufen werden. Verwenden Sie einfach den Namen der globalen Variablen, um darauf zu verweisen. Es ist zu beachten, dass, wenn in der Funktion eine lokale Variable mit demselben Namen wie die globale Variable definiert ist, der Funktionskörper zuerst seine eigene lokale Variable verwendet. Wenn Sie zu diesem Zeitpunkt eine globale Variable mit demselben Namen verwenden müssen, Bitte fügen Sie das Fensterpräfix hinzu. Beispiel:
var msg1='This is message 1'; var msg3='This is message 3'; function otherFunction() { msg2='This is message 2'; //不使用var关键字,其实也是定义一个全局变量 var msg3='Message 3'; alert(msg1); //This is message 1 (函数内当然可以访问到外面定义的全局变量,再深的函数嵌套一样能正确获到这个全局变量,这是JavaScript闭包的其中一种体现) alert(msg3); //Message 3 (局部变量msg3) alert(window.msg3); //This is message 3 (使用window前缀访问同名的全局变量msg3) alert(this.msg3); //This is message 3 (因为otherFunction ()定义在一个全局的环境中,此时otherFunction ()的this也是指向window,所有你看到window. msg3是等于this. msg3的) } otherFunction(); //otherFunction函数外面定义的msg1和里面定义的msg2依然是全局变量 alert(window.msg1); //This is message 1 alert(window.msg2); //This is message 2
2.1 Bei Verwendung des Schlüsselworts var sind die im Funktionskörper definierten Variablen lokale Variablen. Diese Variable kann von allen folgenden Anweisungsblöcken ({}) und Unterfunktionen verwendet werden Es. Auf diese Variable kann überall in dieser Funktion zugegriffen werden, aber außerhalb dieser Funktion kann nicht „direkt“ zugegriffen werden (Schließungen ermöglichen indirekten Zugriff oder Proxy-Zugriff, dieser Wissenspunkt würde den Rahmen dieses Artikels sprengen). Zum Beispiel:
function showMsg() { if (true) { var msg='This is message'; } alert(msg); //This is message } showMsg(); alert(typeof(msg)); //undefiend //这里在if {}大括号内定义的变量msg还能在if外showMsg()内访问到,但在showMsg()外则是无法访问的
2.2 Auf die Variablen der übergeordneten Funktion kann von der untergeordneten Funktion zugegriffen werden, auf die Variablen der untergeordneten Funktion kann jedoch von der übergeordneten Funktion nicht zugegriffen werden Der eingangs erwähnte Funktionsumfang ist konsistent. Es scheint, dass der Vater fröhlicher und der Sohn geizig ist. Zum Beispiel:
function showMsg() { var MsgA='Message A'; this.setMsg=function(msg) { var MsgB='Message B'; alert(MsgA); //Message A (子函数setMsg()可以访问父函数showMsg()的局部变量MsgA) } alert(MsgB); //MsgB未定义 (在父函数中不能访问其子函数中定义的变量MsgB) } var sm=new showMsg(); sm.setMsg('Message string');
3. Um Verwirrung oder Überschreiben von Variablen zu vermeiden, vergessen Sie nicht, das Schlüsselwort var zur Definition lokaler Variablen hinzuzufügen (falls erforderlich). , wir müssen die Variable nach der Verwendung aktiv freigeben (d. h. „Variablenname = null“). Es wird außerdem empfohlen, alle Variablen am Anfang jedes Funktionskörpers zu definieren. Beispiele sind wie folgt:
var msg='Message'; function showMsg() { var msg; //这里即使不小心使用了与全局变量一样的变量名,也不用担心覆盖同名全局变量的问题 var a; var b; var c; for (a=0;a<10;a++){} this.setMsg=function(){} }
2. Nutzen Sie anonyme Funktionen geschickt, um Namenskonflikte oder Variablenverschmutzung zu reduzieren. Die folgenden beiden Codeteile implementieren tatsächlich dieselbe Funktion. Der erste Codeteil ist so geschrieben, dass Sie die Variablennamen, die Sie in der anonymen Funktion usw. verwenden möchten, problemlos verwenden können, dies ist jedoch nicht erforderlich Machen Sie sich Sorgen, dass die von Ihnen definierten Variablen die Definitionen anderer Personen oder Ihre eigenen Variablendefinitionen an anderer Stelle überschreiben.
//定义一个匿名函数,然后把代码丢到这个匿名函数里面,能有效减少命名冲突或变量污染,这是常见JS框架的做法 (function() { var msg='This is message'; alert(msg); })(); document.write(msg); //msg未定义 (匿名函数外的其它方法已无法调用msg这个变量) //----------------------------- var msg='This is message'; alert(msg);
3. Es wird nicht empfohlen, dies anstelle von window zu verwenden, um auf globale Variablen in Funktionen zuzugreifen, die keine Instanziierung erfordern. Normalerweise sollten Funktionen, die das Schlüsselwort this verwenden, als JavaScript-Klassen behandelt werden (ich stelle dem Klassennamen gerne „cls“ voran). Wenn die folgenden Funktionen nur als normale Funktionen aufgerufen werden, sollte das Schlüsselwort this nicht erscheinen, da dies normalerweise dazu dient, eine globale Variable zu bedienen. Beispiel:
Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung der Klassifizierung und Verwendungstechniken für den variablen Bereich von JavaScript anhand von Beispielen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!