In diesem Artikel werden hauptsächlich detaillierte Erklärungen und Beispiele für JavaScript-Funktionsausdrücke vorgestellt.
JavaScript-Funktionsausdrücke
1
Es gibt zwei Möglichkeiten, eine Funktion zu definieren: eine ist eine Funktionsdeklaration und die andere ist ein Funktionsausdruck
1.1 Funktionsdeklaration
function functionName(arg){ //函数体 }
Bei der Funktionsdeklaration ist eine wichtige Funktion die Funktionsdeklarationsförderung, was bedeutet, dass die Funktionsdeklaration vor der Ausführung des Codes gelesen wird. Dies bedeutet, dass die Funktion nach der Anweisung platziert werden kann, die sie aufruft. Wie unten gezeigt:
helloworld(); //在代码执行之前会先读取函数声明 function helloworld(){ console.log("hello world"); }
1.2 Funktionsausdruck
var functionName=function(arg){ //函数体 }
Diese Form sieht so aus sieht aus wie eine reguläre Variablenzuweisungsanweisung, bei der eine Funktion erstellt und der Variablen Funktionsname zugewiesen wird. Die in diesem Fall erstellte Funktion wird als anonyme Funktion bezeichnet. Weil nach dem Funktionsschlüsselwort kein Bezeichner steht.
Funktionsausdrücken muss wie anderen Ausdrücken vor der Verwendung ein Wert zugewiesen werden; der folgende Code führt zu einem Fehler
helloworld(); //错误,还未赋值,函数不存在 var helloworld=function(){ console.log("hello world"); }
Ja Mit Dem Funktionsausdruck können wir dem Funktionsausdruck dynamisch Werte zuweisen, wie im folgenden Code gezeigt:
var helloworld; //声明 if(condition){ //条件 helloworld=function(){ //赋值 console.log("hello world"); } } else{ helloworld=function(){ //赋值 console.log("你好,世界"); } }
2. Rekursive Funktion
Eine rekursive Funktion wird gebildet, wenn eine Funktion sich selbst über ihren Namen aufruft (dasselbe wie C# und andere Sprachen, daher ist die Kernidee des Programms ähnlich, es gibt jedoch einige Unterschiede in der Syntax. Lernen Wenn Sie die Grundlagen einer Sprache gut beherrschen und andere viel einfacher lernen, nehmen wir eine klassische Rekursionsinterviewfrage. Die Regeln für eine Zahlenspalte lauten wie folgt: 1, 1, 2, 3, 5, 8, 13, 21, 34... Finden Sie die 30. Ziffer und verwenden Sie die Rekursionsalgorithmus-Implementierung. Der Code lautet wie folgt:
function foo(n) { if (n <= 0) return 0; else if (n > 0 && n <= 2) return 1; else return foo(n - 1) + foo(n - 2); }
Obwohl diese Funktion kein Problem zu haben scheint, Folgendes Code kann dazu führen, dass es schief geht:
var foo1 = foo; foo = null; console.log(foo1(34));
Der obige Code speichert zuerst die foo()-Funktion in der Variablen foo1 und setzt dann die foo-Variable auf null Dadurch gibt es nur einen Verweis auf die ursprüngliche Funktion. Wenn jedoch foo1() als nächstes aufgerufen wird, tritt in diesem Fall ein Fehler auf, da foo() ausgeführt werden muss und foo bereits null ist. Die Verwendung von arguments.callee kann dieses Problem lösen. arguments.callee ist ein Zeiger auf die ausgeführte Funktion, sodass Sie damit rekursive Aufrufe der Funktion implementieren können
function foo(n) { if (n <= 0) return 0; else if (n > 0 && n <= 2) return 1; else return arguments.callee(n - 1) + arguments.callee(n - 2); }
Sie können auch benannte Funktionsausdrücke verwenden um das gleiche Ergebnis zu erzielen. Zum Beispiel:
var foo = (function f(n) { if (n <= 0) return 0; else if (n > 0 && n <= 2) return 1; else return f(n - 1) + f(n - 2); });
3. Schließung
3.1 Schließung bedeutet das Recht, auf einen anderen Funktionsumfang zuzugreifen. Ein üblicher Weg Einen Abschluss zu erstellen bedeutet, eine Funktion innerhalb einer Funktion zu erstellen. Um Abschlüsse zu verstehen, müssen Sie zunächst den Umfang der speziellen JavaScript-Variablen verstehen. Der Umfang von Variablen besteht aus nichts anderem als zwei Typen, globalen Variablen und lokalen Variablen, um ihn intuitiv auszudrücken:
var n = 100; //定义一个全局变量 function fn() { console.log(n); //函数内部直接读取全局变量 } fn();
Lokale Variablen können nicht direkt außerhalb der Funktion gelesen werden:
function fn() { var n = 100; } console.log(n); //n is not defined
Eine Sache, die hier zu beachten ist, ist, dass es wird innerhalb der Funktion deklariert. Achten Sie bei der Verwendung von Variablen darauf, var zu verwenden. Wenn sie nicht verwendet wird, wird sie zu einer globalen Variablen:
function fn() { n = 100; } fn(); console.log(n); //100
Manchmal brauchen wir um die innerhalb der Funktion deklarierten Variablen abzurufen. Sie können also die oben erwähnte übliche Methode zum Erstellen von Abschlüssen verwenden, um eine weitere Funktion innerhalb der Funktion zu erstellen:
function fn() { n = 100; function fn1() { console.log(n); } fn1(); } fn(); //100
Im Im obigen Code ist die Funktion fn1 in der Funktion fn enthalten. Alle lokalen Variablen in fm sind für fn1 sichtbar. Aber das Gegenteil funktioniert nicht. Die lokalen Variablen in fn1 sind für fn unsichtbar. Dies ist die einzigartige „Kettenbereich“-Struktur der Javascript-Sprache. Das untergeordnete Objekt sucht Ebene für Ebene nach den Variablen aller übergeordneten Objekte. Daher sind alle Variablen des übergeordneten Objekts für das untergeordnete Objekt sichtbar, umgekehrt jedoch nicht.
Es stellt sich heraus, dass fn1 die internen Variablen von fn lesen kann. Solange also fn1 als Rückgabewert verwendet wird, können wir die Variablen von fn extern lesen
function fn() { n = 100; function fn1() { console.log(n); } return fn1; } var result=fn(); result(); //100
Hier ist fn1 ein Abschluss, und ein Abschluss ist eine Funktion, die die internen Variablen anderer Funktionen lesen kann. Da in der Javascript-Sprache nur Unterfunktionen innerhalb der Funktion lokale Variablen lesen können, können Abschlüsse einfach als „innerhalb einer Funktion definierte Funktionen“ verstanden werden. Im Wesentlichen ist der Abschluss also eine Brücke, die das Innere der Funktion mit der Außenseite der Funktion verbindet.
3.2 Der Zweck des Abschlusses
Es hat zwei Hauptzwecke: Der eine besteht darin, die Variablen innerhalb der Funktion zu lesen, und der andere besteht darin, die Werte dieser Variablen beizubehalten in Erinnerung. Wie im folgenden Code gezeigt:
function fn() { n = 100; nadd = function () { n += 1; } function fn1() { console.log(n); } return fn1; } var result = fn(); result(); //100 nadd(); result(); //101
注意:由于闭包函数会携带包含它的函数的作用域,因此会比其他函数占用更多的内存,过度使用闭包可能会导致内存占用过多,所以在退出函数之前,将不使用的局部变量全部删除。
四、块级作用域
块级作用域(又称为私有作用域)的匿名函数的语法如下所示:
(function(){ //块级作用域 })();
无论在什么地方,只要临时需要一些变量,就可以使用私有作用域,比如:
(function () { var now = new Date(); if (now.getMonth() == 0 && now.getDate() == 1) { alert("新年快乐"); } })();
把上面这段代码放到全局作用域中,如果到了1月1日就会弹出“新年快乐”的祝福;这种技术经常在全局作用域中被用在函数外部,从而限制向全局作用域中添加过多的变量和函数。一般来说,我们都应该尽量少向全局作用域中添加变量和函数。在一个由很多开发人员共同参与的大型应用程序中,过多的全局变量和函数很容易导致命名冲突。而通过创建私用作用域,每个开发人员既可以使用自己的变量,又不必担心搞乱全局作用域。
上面是我整理给大家的,希望今后会对大家有帮助。
相关文章:
Das obige ist der detaillierte Inhalt vonJavaScript-Funktionsausdrücke (grafisches Tutorial). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Zu den Hauptanwendungen von JavaScript in der Webentwicklung gehören die Interaktion der Clients, die Formüberprüfung und die asynchrone Kommunikation. 1) Dynamisches Inhaltsaktualisierung und Benutzerinteraktion durch DOM -Operationen; 2) Die Kundenüberprüfung erfolgt vor dem Einreichung von Daten, um die Benutzererfahrung zu verbessern. 3) Die Aktualisierung der Kommunikation mit dem Server wird durch AJAX -Technologie erreicht.

Es ist für Entwickler wichtig, zu verstehen, wie die JavaScript -Engine intern funktioniert, da sie effizientere Code schreibt und Leistungs Engpässe und Optimierungsstrategien verstehen kann. 1) Der Workflow der Engine umfasst drei Phasen: Parsen, Kompilieren und Ausführung; 2) Während des Ausführungsprozesses führt die Engine dynamische Optimierung durch, wie z. B. Inline -Cache und versteckte Klassen. 3) Zu Best Practices gehören die Vermeidung globaler Variablen, die Optimierung von Schleifen, die Verwendung von const und lass und die Vermeidung übermäßiger Verwendung von Schließungen.

Python eignet sich besser für Anfänger mit einer reibungslosen Lernkurve und einer kurzen Syntax. JavaScript ist für die Front-End-Entwicklung mit einer steilen Lernkurve und einer flexiblen Syntax geeignet. 1. Python-Syntax ist intuitiv und für die Entwicklung von Datenwissenschaften und Back-End-Entwicklung geeignet. 2. JavaScript ist flexibel und in Front-End- und serverseitiger Programmierung weit verbreitet.

Python und JavaScript haben ihre eigenen Vor- und Nachteile in Bezug auf Gemeinschaft, Bibliotheken und Ressourcen. 1) Die Python-Community ist freundlich und für Anfänger geeignet, aber die Front-End-Entwicklungsressourcen sind nicht so reich wie JavaScript. 2) Python ist leistungsstark in Bibliotheken für Datenwissenschaft und maschinelles Lernen, während JavaScript in Bibliotheken und Front-End-Entwicklungsbibliotheken und Frameworks besser ist. 3) Beide haben reichhaltige Lernressourcen, aber Python eignet sich zum Beginn der offiziellen Dokumente, während JavaScript mit Mdnwebdocs besser ist. Die Wahl sollte auf Projektbedürfnissen und persönlichen Interessen beruhen.

Die Verschiebung von C/C zu JavaScript erfordert die Anpassung an dynamische Typisierung, Müllsammlung und asynchrone Programmierung. 1) C/C ist eine statisch typisierte Sprache, die eine manuelle Speicherverwaltung erfordert, während JavaScript dynamisch eingegeben und die Müllsammlung automatisch verarbeitet wird. 2) C/C muss in den Maschinencode kompiliert werden, während JavaScript eine interpretierte Sprache ist. 3) JavaScript führt Konzepte wie Verschlüsse, Prototypketten und Versprechen ein, die die Flexibilität und asynchrone Programmierfunktionen verbessern.

Unterschiedliche JavaScript -Motoren haben unterschiedliche Auswirkungen beim Analysieren und Ausführen von JavaScript -Code, da sich die Implementierungsprinzipien und Optimierungsstrategien jeder Engine unterscheiden. 1. Lexikalanalyse: Quellcode in die lexikalische Einheit umwandeln. 2. Grammatikanalyse: Erzeugen Sie einen abstrakten Syntaxbaum. 3. Optimierung und Kompilierung: Generieren Sie den Maschinencode über den JIT -Compiler. 4. Führen Sie aus: Führen Sie den Maschinencode aus. V8 Engine optimiert durch sofortige Kompilierung und versteckte Klasse.

Zu den Anwendungen von JavaScript in der realen Welt gehören die serverseitige Programmierung, die Entwicklung mobiler Anwendungen und das Internet der Dinge. Die serverseitige Programmierung wird über node.js realisiert, die für die hohe gleichzeitige Anfrageverarbeitung geeignet sind. 2. Die Entwicklung der mobilen Anwendungen erfolgt durch reaktnative und unterstützt die plattformübergreifende Bereitstellung. 3.. Wird für die Steuerung von IoT-Geräten über die Johnny-Five-Bibliothek verwendet, geeignet für Hardware-Interaktion.

Ich habe eine funktionale SaaS-Anwendung mit mehreren Mandanten (eine EdTech-App) mit Ihrem täglichen Tech-Tool erstellt und Sie können dasselbe tun. Was ist eine SaaS-Anwendung mit mehreren Mietern? Mit Multi-Tenant-SaaS-Anwendungen können Sie mehrere Kunden aus einem Sing bedienen


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

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

WebStorm-Mac-Version
Nützliche JavaScript-Entwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

DVWA
Damn Vulnerable Web App (DVWA) ist eine PHP/MySQL-Webanwendung, die sehr anfällig ist. Seine Hauptziele bestehen darin, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Tools in einem rechtlichen Umfeld zu testen, Webentwicklern dabei zu helfen, den Prozess der Sicherung von Webanwendungen besser zu verstehen, und Lehrern/Schülern dabei zu helfen, in einer Unterrichtsumgebung Webanwendungen zu lehren/lernen Sicherheit. Das Ziel von DVWA besteht darin, einige der häufigsten Web-Schwachstellen über eine einfache und unkomplizierte Benutzeroberfläche mit unterschiedlichen Schwierigkeitsgraden zu üben. Bitte beachten Sie, dass diese Software

Dreamweaver Mac
Visuelle Webentwicklungstools