Heim Web-Frontend js-Tutorial Betrachten Sie das Vorladen von JavaScript anhand der Funktionsdefinition

Betrachten Sie das Vorladen von JavaScript anhand der Funktionsdefinition

Nov 28, 2016 pm 03:26 PM

Es gibt zwei Möglichkeiten, eine Funktion in JavaScript zu definieren:

function ftn(){} // 第一种
var ftn = function(){} // 第二种
Nach dem Login kopieren

Manche Leute sagen, dass diese beiden Schreibweisen völlig gleichwertig sind. Vor dem Parsen wird jedoch die erstere Schreibweise vom Parser automatisch in den Kopf des Codes befördert, was gegen das Prinzip verstößt, Funktionen zuerst zu definieren und dann zu verwenden. Daher wird empfohlen, wann die letztere Schreibweise zu verwenden Funktionen definieren.

Nachdem ich diesen Satz gelesen habe, habe ich zunächst das Gefühl, dass die beiden in ihrer Verwendung völlig gleich sind, es jedoch Unterschiede in der Analyse gibt. Aber seine Erklärung, dass „die frühere Schreibweise vom Parser automatisch an den Kopf des Codes befördert wird“, verwirrte mich.

Also hatte ich folgenden ersten Test:

<script type="text/javascript">
function ftn()
{
    alert(&#39;old&#39;);
}
 
var b = ftn;
 
function ftn()
{
    b();
    alert(&#39;new&#39;);
}
 
ftn();//浏览器报内存溢出
</script>
Nach dem Login kopieren

Dann habe ich den zweiten Test gemacht:

<script type="text/javascript">
var ftn = function()
{
    alert(&#39;old&#39;);
}
 
var b = ftn;
 
var ftn = function()
{
    b();
    alert(&#39;new&#39;);
}
 
ftn();//old,new依次弹出
</script>
Nach dem Login kopieren

Die Online-Erklärung dafür lautet: Die erste Methode ist dass die Funktion ftn zu Beginn nicht neu definiert, sondern darin ausgeführt wird. Der zweite Weg, ftn=function() wird hier nicht im Code ausgeführt. Funktion ftn wurde neu definiert, daher ist die Neudefinition hier gültig.

Wenn es nicht klar ist, habe ich den folgenden Test durchgeführt:

<script type="text/javascript">
function ftn()
{
    alert(&#39;old&#39;);
}
 
var b = ftn;
 
function ftn()
{
    b();
    alert(&#39;new&#39;);
}
 
alert(b);//结果是重新定义的ftn内容
</script>
Nach dem Login kopieren

Die Testergebnisse ergaben, dass sich nach der Neudefinition von ftn auch der Inhalt von b ändert. Als nächstes habe ich zwei weitere Tests durchgeführt:

<script type="text/javascript">
var ftn = function()
{
    alert(&#39;old&#39;);
}
 
var b = ftn;
 
var ftn = function()
{
    b();
    alert(&#39;new&#39;);
}
 
alert(b);//结果是老的ftn内容
</script>
Nach dem Login kopieren

Das ist in JavaScript sehr interessant, außer den grundlegenden Datentypen. Das Objekt wird im Heap gespeichert und sein Alias ​​ist die Adresse Im Stapel kann der letztere Test offensichtlich mit diesem Prinzip verstanden werden. Warum hat sich der vorherige Test b mit der Neudefinition von ftn geändert?

Ich habe eine neue Erklärung, ich weiß nicht, ob sie richtig ist oder nicht. Es wird keine Methodenüberladung in JavaScript geben überschreiben Sie die vorherige Funktion, var b = ftn; Dieser Satz verweist auf die Referenzen von b und ftn auf den Speicher im selben Heap. Nach der Neudefinition der Funktion ftn(){} überschreibt das neue Funktionsobjekt das alte Objekt und den Heap, auf den verwiesen wird b und ftn Der Adressraum hat sich nicht geändert. Wenn dies der Fall ist, ist diese Schreibweise sinnvoll:

<script type="text/javascript">
function ftn()
{
    alert(&#39;old&#39;);
}
 
var b = ftn;
 
var ftn = function()
{
    b();
    alert(&#39;new&#39;);
}
 
alert(b);//老的ftn
alert(ftn);//新的ftn
ftn();//old ,new
</script>
Nach dem Login kopieren

Auf diese Weise hat sich die Adresse des neuen ftn im Stapel geändert zur Definition des neuen Funktionsobjekts und des Originals Die Funktion wurde nicht überschrieben und wird weiterhin gespeichert, sodass b immer noch die Adresse ist, auf die der alte FTN verweist.

Ich habe gerade einen Artikel über das Verständnis von Funktionen in JavaScript geschrieben. Wenn ich zurückblicke und über den Inhalt meines Artikels nachdenke, habe ich das Gefühl, dass mein Verständnis der Testergebnisse immer noch besteht Beginnen Sie mit dem Kompilieren und Ausführen. JavaScript kompiliert den Code, wenn der Code ausgeführt wird, sodass der durch unsere Variable definierte Typ variabel sein kann. Die von uns gekapselten Objekte können daher häufig Eigenschaften und Methoden hinzufügen, sodass wir die durch meinen Titel verursachten Probleme verstehen können , wie Definition Eine Variable var obj = new Object() führt nur einen sehr anfänglichen Prozess aus, der in JavaScript als Vorkompilierung bezeichnet wird. Sie ist so schwach, dass Sie sie nach Belieben ändern können, ohne die Ausführung zu beeinträchtigen Wenn das Objekt aufgerufen wird, kompiliert der JavaScript-Interpreter den Code und führt ihn dann aus. Dies ist eine Besonderheit von Java Die meisten Skriptsprachen sind nicht schnell. Wenn Sie jedoch eine Funktion wie diese definieren: fonction ftn(){}, wird der Code kompiliert, d. h. ausgeführt. Diese Schreibmethode ist der Definition einer Java-Funktion sehr ähnlich. Dies ist meine neue Interpretation, und ich denke, diese Erklärung ist vernünftiger.

Die „Kompilierung“ von JavaScript prüft nur, ob Codefehler vorliegen, führt den Code jedoch nicht aus. Sie können versuchen, etwas in die Funktion zu schreiben, um ihn zu testen. Vorladen, zuerst Funktion, dann Var. Im obigen Code sind nur Demo1 und Demo3 betroffen. Die Reihenfolge des Quellcodes nach dem Vorladen lautet: Funktion – Funktion – Var 🎜 >

<script type="text/javascript">
//demo1
function ftn()
{
    alert(&#39;old&#39;);
}
function ftn()
{
    b();
    alert(&#39;new&#39;);
}
var b = ftn;
 
ftn();//浏览器报内存溢出
</script>
Nach dem Login kopieren
Das war’s auch schon mit dem Vorladen.
<script type="text/javascript">
//demo3
function ftn()
{
  alert(&#39;old&#39;);
}
function ftn()
{
  b();
  alert(&#39;new&#39;);
}
var b = ftn;
 
alert(b);//结果是重新定义的ftn内容
</script>
Nach dem Login kopieren
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)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 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

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

10 JQuery Fun- und Games -Plugins 10 JQuery Fun- und Games -Plugins Mar 08, 2025 am 12:42 AM

10 Fun JQuery Game -Plugins, um Ihre Website attraktiver zu machen und die Stickinität der Benutzer zu verbessern! Während Flash immer noch die beste Software für die Entwicklung von lässigen Webspielen ist, kann JQuery auch überraschende Effekte erzielen und zwar nicht mit reinen Action -Flash -Spielen vergleichbar sind, aber in einigen Fällen können Sie auch einen unerwarteten Spaß in Ihrem Browser haben. JQuery Tic Toe Game Die "Hello World" der Game -Programmierung hat jetzt eine Jquery -Version. Quellcode JQuery Crazy Word Kompositionsspiel Dies ist ein Spiel mit der Füllung, und es kann einige seltsame Ergebnisse erzielen, da das Wort nicht kennt. Quellcode JQuery Mine Sweeping Game

Wie erstelle ich meine eigenen JavaScript -Bibliotheken? Wie erstelle ich meine eigenen JavaScript -Bibliotheken? Mar 18, 2025 pm 03:12 PM

In Artikel werden JavaScript -Bibliotheken erstellt, veröffentlicht und aufrechterhalten und konzentriert sich auf Planung, Entwicklung, Testen, Dokumentation und Werbestrategien.

JQuery Parallax Tutorial - Animated Header Hintergrund JQuery Parallax Tutorial - Animated Header Hintergrund Mar 08, 2025 am 12:39 AM

Dieses Tutorial zeigt, wie ein faszinierender Parallaxen -Hintergrundeffekt mit JQuery erstellt wird. Wir werden ein Header -Banner mit geschichteten Bildern bauen, die eine atemberaubende visuelle Tiefe erzeugen. Das aktualisierte Plugin funktioniert mit JQuery 1.6.4 und später. Laden Sie die herunter

Wie optimiere ich den JavaScript -Code für die Leistung im Browser? Wie optimiere ich den JavaScript -Code für die Leistung im Browser? Mar 18, 2025 pm 03:14 PM

In dem Artikel werden Strategien zur Optimierung der JavaScript -Leistung in Browsern erörtert, wobei der Schwerpunkt auf die Reduzierung der Ausführungszeit und die Minimierung der Auswirkungen auf die Lastgeschwindigkeit der Seite wird.

Automatische Aktualisierung der Div -Inhalte mit JQuery und Ajax Automatische Aktualisierung der Div -Inhalte mit JQuery und Ajax Mar 08, 2025 am 12:58 AM

Dieser Artikel zeigt, wie Sie den Inhalt eines DIV automatisch alle 5 Sekunden mit JQuery und Ajax aktualisieren können. Das Beispiel holt und zeigt die neuesten Blog -Beiträge aus einem RSS -Feed zusammen mit dem letzten Aktualisierungstempel. Ein Ladebild ist Optiona

Erste Schritte mit Matter.js: Einführung Erste Schritte mit Matter.js: Einführung Mar 08, 2025 am 12:53 AM

Matter.js ist eine in JavaScript geschriebene 2D -Motorhilfe -Physik -Engine. Diese Bibliothek kann Ihnen helfen, die 2D -Physik in Ihrem Browser problemlos zu simulieren. Es bietet viele Merkmale, wie die Möglichkeit, starre Körper zu erstellen und physikalische Eigenschaften wie Masse, Fläche oder Dichte zuzuweisen. Sie können auch verschiedene Arten von Kollisionen und Kräften simulieren, wie z. B. die Schwerkraft Reibung. Matter.js unterstützt alle Mainstream -Browser. Darüber hinaus ist es für mobile Geräte geeignet, da es Berührungen erkennt und reagiert. Alle diese Funktionen machen es Ihre Zeit wert, zu lernen, wie man die Engine benutzt. In diesem Tutorial werde ich die Grundlagen dieser Bibliothek, einschließlich ihrer Installation und Nutzung, behandeln und a bereitstellen

See all articles