Heim  >  Artikel  >  Web-Frontend  >  Eine kurze Erläuterung des Funktionsumfangs und des Umfangs auf Blockebene in JavaScript

Eine kurze Erläuterung des Funktionsumfangs und des Umfangs auf Blockebene in JavaScript

不言
不言Original
2018-08-01 16:13:321975Durchsuche

Dieser Artikel stellt Ihnen eine kurze Erläuterung des Funktionsumfangs und des Blockebenenumfangs in JavaScript vor. Ich hoffe, dass er für Sie hilfreich ist.

1. Umfang auf Funktionsebene

Schauen wir uns zuerst einen Code an

var a = true;

function hoisting(){
    if(!a){
        var a = 2;
    }
    console.log(a)
}

hoisting();
// 最终结果:2

Die Logik dieses Codes ist

  1. sucht zunächst nach Variablen im aktuellen 函数域.

  2. Wenn er vorhanden ist, deklarieren Sie zuerst den Variablenheader. Wenn er nicht vorhanden ist, suchen Sie

  3. erneut vom übergeordneten Element aus, bis er gefunden wird.

Dann können wir es wie folgt umschreiben:

var a; // 变量声明 
a = true; // 变量定义

function hoisting(){
    var a; // 变量声明
    if(!a){
        a = 2; //变量定义
    }
    console.log(a) // 先从自身函数域开始查找,找不到再去父作用域
}

hoisting();

Javascript-Variablen existieren mit Funktionen als Gültigkeitsbereich, und wenn sie lokal nicht gefunden werden können, werden sie auf der übergeordneten Ebene gesucht, um sie zu finden ihnen.

2. Lösung: Schließung IIFE

Es hat möglicherweise nicht viel mit diesem Artikel zu tun ~~, die Hauptsache ist, dass Schließung eine neue Funktionsdomäne erstellt.

Sofort aufgerufener Funktionsausdruck

Seine Funktion besteht darin, der Variablen einen Wert zuzuweisen, bevor sie aufgerufen wird

var a = (function(){
    var a = 3
    return a
}())

3. Lösung: let, const

Die Hauptfunktion von let und const besteht darin, den ursprünglichen Funktionsbereich von JavaScript an den Bereich auf Blockebene anzupassen

let a = 2;

function block(){
    if(!a){
        let a =1
    }
    console.log(a)
}

block() // 2

Zu diesem Zeitpunkt ist der Funktionsumfang unterteilt Kleiner, auf Blockebene.

Wir können den Code in drei Blöcke unterteilen

  • if-Block

  • Blockblock

  • Fensterblock

Okay, was passiert nun, wenn wir die Funktion neu schreiben?

let a = 0;

function block(){
    if(!a){
        let a =1
    }
    console.log(a)
}

block() // 0

Das Endergebnis ist 0, wenn a im Strom nicht gefunden werden kann Block Manchmal geht es zur Suche zum übergeordneten Block und der Endwert ist 0

Und die Variablen im if-Block sind nur innerhalb des Blocks gültig

Empfohlene verwandte Artikel:

JS-objektorientierte gekapselte Analyse in der Programmierung

Wie heißt die selbstaufrufende anonyme Funktion von jQuery?

Das obige ist der detaillierte Inhalt vonEine kurze Erläuterung des Funktionsumfangs und des Umfangs 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