Heim  >  Artikel  >  Web-Frontend  >  Detaillierte Erläuterung des Unterschieds zwischen Bereich und Bereich auf Blockebene in Javascript

Detaillierte Erläuterung des Unterschieds zwischen Bereich und Bereich auf Blockebene in Javascript

亚连
亚连Original
2018-06-21 17:54:241202Durchsuche

Der Gültigkeitsbereich ist in jeder Programmiersprache immer das Wichtigste, da er die Sichtbarkeit und den Lebenszyklus von Variablen und Parametern steuert. Lassen Sie mich Ihnen den Bereich und den Bereich auf Blockebene in Javascript vorstellen. Freunde, die ihn benötigen, können darauf verweisen

Beschreibung des Bereichs auf Blockebene

Bevor wir den Variablenbereich von JavaScript lernen, sollten wir einige Punkte klären:

a Der Variablenbereich von JavaScript basiert auf seiner einzigartigen Bereichskette.

b. JavaScript hat keinen Gültigkeitsbereich auf Blockebene.

c. Die in der Funktion deklarierten Variablen werden in der gesamten Funktion definiert.

Der Variablenbereich von JavaScript unterscheidet sich von der häufig verwendeten C-ähnlichen Sprache. Zum Beispiel der Code in C#:

static void Main(string[] args)
{
   if(true)
   {
    int number=10;
   }
  Console.WriteLine(number);
}

Dieser Code kann nicht kompiliert werden, weil „der aktuelle Kontext nicht vorhanden ist.“ ist Zahl".

Da der Gültigkeitsbereich der Variablen hier durch geschweifte Klammern begrenzt ist, wird er als Gültigkeitsbereich auf Blockebene bezeichnet.

Im Bereich auf Blockebene liegen alle Variablen innerhalb der geschweiften Klammern der Definition. Sie können im Bereich vom Anfang der Definition bis zum Ende der geschweiften Klammern verwendet werden Dieser Bereich, also

if(true)
{
  int number=10;
  Console.WriteLine(number);
}

Dies ist zugänglich, da die Variable in denselben geschweiften Klammern definiert und verwendet wird.

In JavaScript gibt es jedoch kein Konzept für den Bereich auf Blockebene.

2. Geltungsbereich in Javascript

1. Funktionsbegrenzter Variablenbereich

In Javascript, innerhalb der Funktion Die definierten Variablen Der Zugriff kann innerhalb der Funktion erfolgen, jedoch nicht außerhalb der Funktion. Code:

<script type="text/javascript">
  var num=function()
  {
   var number=10;
  };
  try{
    alert(number);
  }catch(e)
  {
    alert(e);
  } 
</script>

Wenn der Code ausgeführt wird, wird eine Ausnahme ausgelöst. Die Variablennummer ist nicht definiert, da sie in der Funktion definiert ist. Variablen können nicht außerhalb der Funktion verwendet werden, können aber beliebig innerhalb der Funktion verwendet werden, sogar vor der Zuweisung:

<script type="text/javascript">
 var num=function(){
    alert(number);
    var number=10;
    alert(number);
 };
 try{
   num();
 }catch(e){
  alert(e);
 }
</script>

Nachdem dieser Code ausgeführt wurde, wird kein Fehler ausgegeben und er wird zweimal angezeigt, nämlich undefiniert und 10

2. Subdomäne greift auf übergeordnete Domäne zu

Eine Funktion kann den Bereich einer Variablen einschränken, dann ist die Funktion in der Funktion eine Unterdomäne des Bereichs Unterdomäne Der Code kann auf die Variablen in der übergeordneten Domäne zugreifen. Der Code lautet wie folgt:

<script type="text/javascript">
 var func=function(){
    var number=10;
    var sub_func=function(){
      alert(num);
    };
   sub_func();
};
func();
</script>

Das Ergebnis der Ausführung dieses Codes ist 10, aber der Zugriff auf den Code der übergeordneten Domäne in der untergeordneten Domäne ist ebenfalls bedingt

<script type="text/javascript">
 var func=function(){
    var number=10;
    var sub_func=function(){
      var num=20;
      alert(num);
    };
   sub_func();
};
func();
</script>

Dieser Code hat eine weitere „var num=20;“ Dieser Code befindet sich in der Subdomain, daher hat sich die Situation des Zugriffs der Subdomain auf die übergeordnete Domain geändert 20. Zu diesem Zeitpunkt ist die Anzahl der Unterdomänen, auf die die Domäne zugreift, eine Variable in der untergeordneten Domäne und nicht in der übergeordneten Domäne. Es ist ersichtlich, dass es bei der Verwendung von Variablen in JavaScript zunächst nach der Definition der Variablen im aktuellen Bereich sucht. Wenn nicht, suchen Sie nach der Variablen übergeordnete Domäne usw., bis der Bereich der obersten Ebene immer noch nicht gefunden wird, wird eine Ausnahme „Variable ist nicht definiert“ ausgelöst. Der Code lautet wie folgt:

<script type="text/javascript">
 (function (){
   var num=10;
   (function (){
     var num=20;
     (function(){
     alert(num);
      })();
   })();
  })();
</script>

Nachdem dieser Code ausgeführt wurde, 20 wird gedruckt. Wenn „var num=20“ verwendet wird. Wenn Sie es entfernen, ist der gedruckte Wert 10. Entfernen Sie auch „var num=10“, dann tritt ein undefinierter Fehler auf.

Das Folgende ist eine Einführung in den JS-Bereich und den Bereich auf Blockebene

Der Bereich ist in jeder Programmiersprache immer das Wichtigste weil es die Sichtbarkeit und den Lebenszyklus von Variablen und Parametern steuert. Apropos: Verstehen Sie zunächst zwei Konzepte: den Umfang auf Blockebene und den Funktionsumfang.

Was ist der Umfang auf Blockebene?

Jeder Satz von Anweisungen in einem Paar geschweifter Klammern ({ und }) gehört zu einem Block. Alle darin definierten Variablen sind außerhalb des Codeblocks unsichtbar.

Der Funktionsumfang ist leicht zu verstehen (*^__^*). Die in der Funktion definierten Parameter und Variablen sind außerhalb der Funktion nicht sichtbar.

Die meisten C-ähnlichen Sprachen haben einen Gültigkeitsbereich auf Blockebene, JS jedoch nicht. Bitte sehen Sie sich die Demo unten an:

//C语言 
#include <stdio.h> 
void main() 
{ 
  int i=2; 
  i--; 
  if(i) 
  { 
    int j=3; 
  } 
  printf("%d/n",j); 
}

Wenn Sie diesen Code ausführen, wird die Fehlermeldung „Verwenden Sie eine undefinierte Variable:j“ angezeigt. Wie Sie sehen, hat die Sprache C einen Gültigkeitsbereich auf Blockebene, da j im if-Anweisungsblock definiert ist und daher außerhalb des Blocks nicht darauf zugegriffen werden kann.

Wie verhält sich JS? Schauen wir uns eine andere Demo an:

functin test(){ 
 for(var i=0;i<3;i++){   
 } 
 alert(i); 
} 
test();

Wenn Sie diesen Code ausführen, wird „3“ angezeigt, die Variable, in der ich definiert habe Der Block ist weiterhin zugänglich. Mit anderen Worten: JS unterstützt keinen Gültigkeitsbereich auf Blockebene, sondern nur den Funktionsbereich und Variablen, die an einer beliebigen Stelle in einer Funktion definiert sind, sind überall in der Funktion sichtbar.

Wie sorgen wir also dafür, dass JS einen Geltungsbereich auf Blockebene hat? Erinnern Sie sich noch daran, dass in einer Funktion definierte Variablen zerstört werden, wenn die Funktion aufgerufen wird? Können wir diese Funktion verwenden, um den Umfang von JS auf Blockebene zu simulieren? Schauen Sie sich die DEMO unten an:

  function test(){ 
 (function (){ 
 for(var i=0;i<4;i++){ 
 } 
 })(); 
 alert(i); 
} 
test();

这时候再次运行,会弹出"i"未定义的错误,哈哈,实现了吧~~~这里,我们把for语句块放到了一个闭包之中,然后调用这个函数,当函数调用完毕,变量i自动销毁,因此,我们在块外便无法访问了。 

JS的闭包特性is the most important feature((*^__^*) 大家懂的)。在JS中,为了防止命名冲突,我们应该尽量避免使用全局变量和全局函数。那么,该如何避免呢?不错,正如上文demo所示,我们可以把要定义的所有内容放入到一个

(function (){ 
//内容 
})();

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

使用nginx + node如何部署https

在JavaScript中如何实现AOP

在mongoose中有关于更新对象的详细介绍

在JS函数中有关setTimeout详细介绍

使用jquery如何实现侧边栏左右伸缩效果

在Vue中如何实现数字输入框组件

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Unterschieds zwischen Bereich und Bereich auf Blockebene 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