Heim > Web-Frontend > js-Tutorial > Hauptteil

Detaillierte Einführung in den Bereich auf Blockebene in ES6 (Codebeispiel)

不言
Freigeben: 2019-01-18 10:55:01
nach vorne
2801 Leute haben es durchsucht

Dieser Artikel bietet Ihnen eine detaillierte Einführung (Codebeispiel) zum Bereich auf Blockebene in ES6. Ich hoffe, er wird Ihnen helfen.

Lassen Sie uns heute den Umfang auf Blockebene in ES6 besprechen.

Globaler Umfang und Funktionsumfang

In ES5 gibt es nur globalen Umfang und Funktionsumfang. Dies führt dazu, dass der Funktionsbereich den globalen Bereich abdeckt; andernfalls werden die Variablen in der Schleife in globale Variablen durchgesickert.

Zum Beispiel:

//  1.函数作用域覆盖了全局作用域,发生了变量提升,函数声明大于var声明的变量,因此函数里面的a提到了前面,在打印a,初始化一个undefined给a,所以打印出了undefined。
var a = '1';
function fn() {
    console.log(a);
    if (3<2) {
        var a  = 3;
    }
}
fn(); // undefined
// 2.循环中的变量泄露为全局变量
for(var i=0;i<5;i++) {
    console.log(i);
}
console.log(i); // 5;
Nach dem Login kopieren

ES6-Bereich auf Blockebene

Der Bereich auf Blockebene wird mit dem let-Befehl hinzugefügt, der äußere Bereich kann jedoch nicht Gehen Sie zum inneren Bereich, sehr sicher und klar. Selbst wenn sowohl die äußere als auch die innere Schicht denselben Variablennamen verwenden, stören sie sich nicht gegenseitig.

// 1.外层作用域无法获取到内层作用域
function fn1() {
    let a = 41;
    if(1 == 1) {
        let a = 3;
        console.log(2,a); // 2 3
    }
    console.log(1,a); // 1 41
}
fn1();

{  
    {
        let food = &#39;apple&#39;;
    }
    console.log(food); // Uncaught ReferenceError: food is not defined
}

{  
    {
        let food = &#39;apple&#39;;
    }
    console.log(food); // Uncaught ReferenceError: food is not defined
}

// 2. 外层和内层都使用相同变量名,也都互不干扰
{  
    {
        let food = &#39;apple&#39;;
        console.log(food); // apple
    }
    let food = &#39;orange&#39;;
    console.log(food); // orange
}
Nach dem Login kopieren

Bereich und Funktionsdeklaration auf Blockebene

In ES5 können Funktionen nur im Bereich und Funktionsbereich der obersten Ebene deklariert werden, nicht auf Blockebene Domain. Aber in ES6 können Funktionen im Blockbereich deklariert werden.

Aber es wird bestimmte Probleme geben, da die Funktionsdeklaration an den Anfang des Codes gestellt wird. Daher wird ein Fehler gemeldet. Es ist am besten, Funktionsausdrücke zur Darstellung einer Funktion in ES6 zu verwenden.

Zum Beispiel:

//1.函数声明报错
{
    if (4 < 2) {
        function fn() {
            console.log(&#39;我在函数里面!&#39;);
        }
    }
}
fn(); // Uncaught TypeError: fn is not a function
//2.函数表达式没错
{
    let fa = &#39;111&#39;;
    let fn = function () {
        console.log(&#39;我在函数里面!&#39;);
    }
    console.log(fa,fn); // 111 ƒ () { console.log(&#39;我在函数里面!&#39;);}
}
Nach dem Login kopieren

Hinweis: Die Bedingung, die die Deklaration von Funktionen im Bereich auf Blockebene in ES6 ermöglicht, muss in geschweiften Klammern stehen, andernfalls wird ein Fehler ausgegeben gemeldet.

// 1.报错的情况
if (4>2) {
    let fn = function () {};
}

//2.报错的情况
if (4>2)
    let fn = function () {}; // Uncaught SyntaxError: Lexical declaration cannot appear in a single-statement context
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in den Bereich auf Blockebene in ES6 (Codebeispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
es6
Quelle:cnblogs.com
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!