Detaillierte Erläuterung der modularen Javascript-Programmierung
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);
2. Die Bedeutung von Klammern
2.1 Umbruch function(){}
in einen Ausdruck umzuwandeln. Wie beim Quellcode einiger Bibliotheken verwende ich zum Ersetzen gerne die folgende Methode: function(){}
~function(){ // 代码... }();
+function(){ // 代码... }();
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(){}
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ärenvar wall = {}; (function(window, WALL, undefined){ })(window, wall);
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
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){ // 代码... }
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.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();
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();
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();
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 = {}));
眼尖的已经看出区别了,就是文件开始的地方,先写上分号;
。
这样,多个文件合并的时候,才不会出现收尾相接,代码出现错乱的问题。比如下面这种情况:
// a.js 文件 wall.log() // b.js 文件 (function(window, WALL, undefined){ // 给wall命名空间绑定方法say WALL.say = function(){ console.log('hello'); } })(window, window.wall || (window.wall = {}));
由于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!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

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

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

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

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

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

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

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

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
