Inhaltsverzeichnis
IFE Erklärung" >1. IIFE Erklärung
2. Die Bedeutung von Klammern
五、分文件加载IIFE要注意的点
Heim Web-Frontend js-Tutorial Detaillierte Erläuterung der modularen Javascript-Programmierung

Detaillierte Erläuterung der modularen Javascript-Programmierung

Apr 04, 2017 pm 02:00 PM

1. IIFE Erklärung

buchstabiert „Immediately Invoked Function Expression“, eine sofort ausgeführte Funktion Ausdruck.

Wie im folgenden Code gezeigt, handelt es sich um eine anonyme, sofort ausgeführte Funktion:

(function(window, undefined){
  // 代码...    
})(window);
Nach dem Login kopieren

2. Die Bedeutung von Klammern

2.1 Umbruch function(){}

Der Zweck dieser Klammer besteht darin,

in einen Ausdruck umzuwandeln. Wie beim Quellcode einiger Bibliotheken verwende ich zum Ersetzen gerne die folgende Methode: function(){}

~function(){
  // 代码...
}();
Nach dem Login kopieren
oder auf diese Weise:

+function(){
  // 代码...
}();
Nach dem Login kopieren
Tatsächlich ist der Effekt der gleiche, sie sollen

zur einfachen Ausführung in ausführbare Ausdrücke konvertieren. function(){} Wenn die Klammern entfernt werden, wird ein Fehler gemeldet. Da es sich bei einem einfachen
nicht um einen ausführbaren Ausdruck handelt, wird ein Fehler direkt gemeldet. Wie unten gezeigt: function(){}

Detaillierte Erläuterung der modularen Javascript-Programmierung


2.1 Die Bedeutung der zweiten Klammer

Nachdem Sie die Bedeutung der ersten Klammer verstanden haben, ist die zweite Klammer sehr einfach: Sie besteht darin, den Ausdruck auszuführen.

3. Die Bedeutung von Parametern

Nehmen Sie diesen Code als Beispiel, um die Parameter zu erklären

var wall = {};
(function(window, WALL, undefined){

})(window, wall);
Nach dem Login kopieren
Parameter sind in formale Parameter und tatsächliche Parameter unterteilt. Die drei Parameter


sind formale Parameter und die beiden Parameter in der zweiten Klammer function(window, WALL, undefined) sind tatsächliche Parameter. (window, wall) kann auch als
, window == window verstanden werden. wall == WALL

2.1 Gewöhnliche formale Parameter

Gewöhnliche formale Parameter beziehen sich auf die tatsächlichen

Variablen window wie wall und , die in und übergeben werden für jede Art von Variable angegeben. Ein formaler Parameter entspricht einem tatsächlichen Parameter

2.2 Spezieller formaler Parameter undefiniert

Warum müssen wir einen zusätzlichen undefinierten Parameter für den formalen Parameter schreiben? Das ist sehr interessant Thema.

Wie Sie in diesem Beispiel sehen können, gibt es nur zwei tatsächliche Parameter und drei formale Parameter. Daher wird dem Formalparameter
beim Ausführen der Funktion standardmäßig der Wert undefiniert zugewiesen. undefined

Die Funktionen des formalen Parameters

lauten wie folgt: undefined

2.2.1 Verhindern Sie, dass der Sonderwert undefiniert durch bösartigen Code manipuliert wird. In Browsern niedrigerer Versionen wie IE6 kann undefiniert geändert werden. Nachdem dieser Sonderwert geändert wurde, werden Urteile wie die folgenden ungültig.

if(wall == undefined){
  // 代码...
}
Nach dem Login kopieren
Der Zweck des Hinzufügens eines zusätzlichen formalen Parameters besteht also darin, dies zu verhindern. Solange es innerhalb dieses IIFE-Bereichs liegt, kann undefiniert normal abgerufen werden.

2.2.2 Komprimierter Code kann undefiniert komprimieren Da undefiniert als formaler Parameter verwendet wird, können Codekomprimierungstools wie der YUI-Kompressor die zugehörigen Werte komprimieren und so die Dateigröße verringern.

4. Schreibanalyse

4.1 Allgemeine Schreibweise

var wall = {}; // 声明定义一个命名空间wall

// 定义方法
(function(window, WALL, undefined){
    // 给wall命名空间绑定方法say
    WALL.say = function(){
        console.log('hello');
    };
})(window, wall);

(function(window, WALL, undefined){
    // 给wall命名空间绑定方法 whoIam
    WALL.whoIam = function(){
        console.log('wall');
    };
})(window, wall);

// 调用
wall.say();
wall.whoIam();
Nach dem Login kopieren
Definieren Sie zuerst einen Namespace und fügen Sie dann Dinge zu diesem Namespace hinzu. Dies ist die gebräuchlichste Schreibweise und am einfachsten zu verstehen.

Der Nachteil besteht darin, dass ein Namespace deklariert werden muss, bevor der entsprechende Bindungscode ausgeführt werden kann. Es gibt ein Problem beim sequentiellen Laden.

4.2 Verstärkungsmodus

var wall = (function(window, WALL, undefined){
    if(typeof WALL == 'undefined'){
        WALL = {};
    }

    // 给wall命名空间绑定方法say
    WALL.say = function(){
        console.log('hello');
    }

    return WALL; // 返回引用
})(window, wall);

var wall = (function(window, WALL, undefined){
    if(typeof WALL == 'undefined'){
        WALL = {};
    }

    // 给wall命名空间绑定方法 whoIam
    WALL.whoIam = function(){
        console.log('wall');
    }

    return WALL; // 返回引用
})(window, wall);

// 调用
wall.say();
wall.whoIam();
Nach dem Login kopieren
Der Vorteil des Verstärkungsmodus besteht darin, dass Sie nicht auf die Reihenfolge achten müssen, in der der Code geladen wird.

Da
js wiederholte var-Deklarationen für -Variablen zulässt, kann dieser Code ausgeführt werden. wall Ich kann die IIFE-Funktion zum Laden in mehrere Dateien aufteilen, ohne dass die Probleme auftreten, auf die man beim normalen Schreiben achten muss.

Zu beachtende Punkte: 1. Der Header von IIFE muss zunächst prüfen, ob der Namespace instanziiert wurde. Wenn er nicht instanziiert wurde, instanziieren Sie ihn.
2. Am Ende des IIFE muss ein Verweis auf den Namespace zurückgegeben werden, damit nachfolgender Code den neuesten
Namespace-Inhalt erhalten kann. wall

4.3 Wide-Verstärkungsmodus

(function(window, WALL, undefined){
    // 给wall命名空间绑定方法say
    WALL.say = function(){
        console.log('hello');
    }
})(window, window.wall || (window.wall = {}));

(function(window, WALL, undefined){
    // 给wall命名空间绑定方法 whoIam
    WALL.whoIam = function(){
        console.log('wall');
    }
})(window, window.wall || (window.wall = {}));

// 调用
wall.say();
wall.whoIam();
Nach dem Login kopieren

Das Wichtigste zum Wide-Verstärkungsmodus: ist das in der Realität Parameterteil. window.wall || (window.wall = {})Verwenden Sie ||
Operator, um Tricks auszuführen. Wenn
instanziiert wird, ist es nicht definiert. Geben Sie dann direkt die Referenz von window.wall zurück und weisen Sie sie dem formalen Parameter window.wall zu. Inhalte, die auf den ||-Operator folgen, werden nicht ausgeführt. WALL Wenn
noch nicht instanziiert wurde, instanziieren Sie es. Hierbei ist zu beachten, dass es sich bei der Instanziierung um eine Zuweisungsoperation handelt, die zur Ausführung in Klammern gesetzt und in einen Ausdruck umgewandelt werden muss, damit kein Fehler gemeldet wird. Nachdem der window.wall-Ausdruck
ausgeführt wurde, wird ein Verweis auf das neue (window.wall = {})-Objekt zurückgegeben. window.wall

宽放大模式的好处:是可以切割成多个文件进行加载,而不必考虑文件加载的先后顺序,不存在强耦合关系。
 当然,如果IIFE里面的方法互相引用,还是存在加载依赖的问题。这个问题可以用加载器Require.js等工具解决,这里就不讨论了。

五、分文件加载IIFE要注意的点

;(function(window, WALL, undefined){
    // 给wall命名空间绑定方法say
    WALL.say = function(){
        console.log('hello');
    }
})(window, window.wall || (window.wall = {}));
Nach dem Login kopieren

 眼尖的已经看出区别了,就是文件开始的地方,先写上分号;
 这样,多个文件合并的时候,才不会出现收尾相接,代码出现错乱的问题。比如下面这种情况:

// a.js 文件
wall.log()

// b.js 文件
(function(window, WALL, undefined){
    // 给wall命名空间绑定方法say
    WALL.say = function(){
        console.log('hello');
    }
})(window, window.wall || (window.wall = {}));
Nach dem Login kopieren

 由于a.js文件的wall.log()少写了分号,跟b.js文件合并后,js就会认为‘wall.log()(...)’是需要这么执行的,结果代码就报错了。


 觉得不错的,可以关注<a href="http://www.php.cn/js/js-weixinapp-module.html" target="_blank">模块化</a>这个系列的文章,容我后续码字,敬请期待!


Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der modularen Javascript-Programmierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Ersetzen Sie Stringzeichen in JavaScript Ersetzen Sie Stringzeichen in JavaScript Mar 11, 2025 am 12:07 AM

Detaillierte Erläuterung der Methode für JavaScript -Zeichenfolge und FAQ In diesem Artikel werden zwei Möglichkeiten untersucht, wie String -Zeichen in JavaScript ersetzt werden: Interner JavaScript -Code und interne HTML für Webseiten. Ersetzen Sie die Zeichenfolge im JavaScript -Code Die direkteste Möglichkeit ist die Verwendung der Ersatz () -Methode: str = str.replace ("find", "ersetzen"); Diese Methode ersetzt nur die erste Übereinstimmung. Um alle Übereinstimmungen zu ersetzen, verwenden Sie einen regulären Ausdruck und fügen Sie das globale Flag G hinzu:: STR = Str.Replace (/fi

Benutzerdefinierte Google -Search -API -Setup -Tutorial Benutzerdefinierte Google -Search -API -Setup -Tutorial Mar 04, 2025 am 01:06 AM

Dieses Tutorial zeigt Ihnen, wie Sie eine benutzerdefinierte Google -Such -API in Ihr Blog oder Ihre Website integrieren und ein raffinierteres Sucherlebnis bieten als Standard -WordPress -Themen -Suchfunktionen. Es ist überraschend einfach! Sie können die Suche auf y beschränken

Erstellen Sie Ihre eigenen AJAX -Webanwendungen Erstellen Sie Ihre eigenen AJAX -Webanwendungen Mar 09, 2025 am 12:11 AM

Hier sind Sie also bereit, alles über dieses Ding namens Ajax zu lernen. Aber was genau ist das? Der Begriff AJAX bezieht sich auf eine lose Gruppierung von Technologien, mit denen dynamische, interaktive Webinhalte erstellt werden. Der Begriff Ajax, ursprünglich von Jesse J geprägt

Beispielfarben JSON -Datei Beispielfarben JSON -Datei Mar 03, 2025 am 12:35 AM

Diese Artikelserie wurde Mitte 2017 mit aktuellen Informationen und neuen Beispielen umgeschrieben. In diesem JSON -Beispiel werden wir uns ansehen, wie wir einfache Werte in einer Datei mit JSON -Format speichern können. Mit der Notation des Schlüsselwertpaares können wir jede Art speichern

10 JQuery Syntax Highlighters 10 JQuery Syntax Highlighters Mar 02, 2025 am 12:32 AM

Verbessern Sie Ihre Codepräsentation: 10 Syntax -Hochlichter für Entwickler Das Teilen von Code -Snippets auf Ihrer Website oder Ihrem Blog ist eine gängige Praxis für Entwickler. Die Auswahl des richtigen Syntax -Highlighter kann die Lesbarkeit und die visuelle Anziehungskraft erheblich verbessern. T

8 atemberaubende JQuery -Seiten -Layout -Plugins 8 atemberaubende JQuery -Seiten -Layout -Plugins Mar 06, 2025 am 12:48 AM

Nutzen Sie JQuery für mühelose Webseiten -Layouts: 8 Essential Plugins JQuery vereinfacht das Webseitenlayout erheblich. In diesem Artikel werden acht leistungsstarke JQuery -Plugins hervorgehoben, die den Prozess optimieren, insbesondere nützlich für die manuelle Website -Erstellung

10 JavaScript & JQuery MVC -Tutorials 10 JavaScript & JQuery MVC -Tutorials Mar 02, 2025 am 01:16 AM

Dieser Artikel enthält eine kuratierte Auswahl von über 10 Tutorials zu JavaScript- und JQuery Model-View-Controller-Frameworks (MVC). Diese Tutorials decken eine Reihe von Themen von Foundatio ab

Was ist ' this ' in JavaScript? Was ist ' this ' in JavaScript? Mar 04, 2025 am 01:15 AM

Kernpunkte Dies in JavaScript bezieht sich normalerweise auf ein Objekt, das die Methode "besitzt", aber es hängt davon ab, wie die Funktion aufgerufen wird. Wenn es kein aktuelles Objekt gibt, bezieht sich dies auf das globale Objekt. In einem Webbrowser wird es durch Fenster dargestellt. Wenn Sie eine Funktion aufrufen, wird das globale Objekt beibehalten. Sie können den Kontext mithilfe von Methoden wie CALL (), Apply () und Bind () ändern. Diese Methoden rufen die Funktion mit dem angegebenen Wert und den Parametern auf. JavaScript ist eine hervorragende Programmiersprache. Vor ein paar Jahren war dieser Satz

See all articles